home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / ELECTRIC / DSPICE0S.ZIP / mosfet.c < prev    next >
C/C++ Source or Header  |  1992-11-22  |  64KB  |  1,810 lines

  1. /* mosfet.f -- translated by f2c (version of 3 February 1990  3:36:42).
  2.    You must link the resulting object file with the libraries:
  3.     -lF77 -lI77 -lm -lc   (in that order)
  4. */
  5.  
  6. #include "f2c.h"
  7.  
  8. /* Common Block Declarations */
  9.  
  10. struct {
  11.     integer ielmnt, isbckt, nsbckt, iunsat, nunsat, itemps, numtem, isens, 
  12.         nsens, ifour, nfour, ifield, icode, idelim, icolum, insize, 
  13.         junode, lsbkpt, numbkp, iorder, jmnode, iur, iuc, ilc, ilr, 
  14.         numoff, isr, nmoffc, iseq, iseq1, neqn, nodevs, ndiag, iswap, 
  15.         iequa, macins, lvnim1, lx0, lvn, lynl, lyu, lyl, lx1, lx2, lx3, 
  16.         lx4, lx5, lx6, lx7, ld0, ld1, ltd, imynl, imvn, lcvn, nsnod, 
  17.         nsmat, nsval, icnod, icmat, icval, loutpt, lpol, lzer, irswpf, 
  18.         irswpr, icswpf, icswpr, irpt, jcpt, irowno, jcolno, nttbr, nttar, 
  19.         lvntmp;
  20. } tabinf_;
  21.  
  22. #define tabinf_1 tabinf_
  23.  
  24. struct {
  25.     integer locate[50], jelcnt[50], nunods, ncnods, numnod, nstop, nut, nlt, 
  26.         nxtrm, ndist, ntlin, ibr, numvs, numalt, numcyc;
  27. } cirdat_;
  28.  
  29. #define cirdat_1 cirdat_
  30.  
  31. struct {
  32.     doublereal vto, beta, gamma, phi, phib, cox, xnsub, xnfs, xd, xj, xld, 
  33.         xlamda, uo, uexp, vbp, utra, vmax, xneff, xl, xw, vbi, von, vdsat,
  34.          qspof, beta0, beta1, cdrain, xqco, xqc, fnarrw, fshort;
  35.     integer lev;
  36. } mosarg_;
  37.  
  38. #define mosarg_1 mosarg_
  39.  
  40. struct {
  41.     doublereal omega, time, delta, delold[7], ag[7], vt, xni, egfet, xmu, 
  42.         sfactr;
  43.     integer mode, modedc, icalc, initf, method, iord, maxord, noncon, iterno, 
  44.         itemno, nosolv, modac, ipiv, ivmflg, ipostp, iscrch, iofile;
  45. } status_;
  46.  
  47. #define status_1 status_
  48.  
  49. struct {
  50.     doublereal twopi, xlog2, xlog10, root2, rad, boltz, charge, ctok, gmin, 
  51.         reltol, abstol, vntol, trtol, chgtol, eps0, epssil, epsox, pivtol,
  52.          pivrel;
  53. } knstnt_;
  54.  
  55. #define knstnt_1 knstnt_
  56.  
  57. struct {
  58.     integer idebug[20];
  59. } debug_;
  60.  
  61. #define debug_1 debug_
  62.  
  63. struct {
  64.     doublereal value[200000];
  65. } blank_;
  66.  
  67. #define blank_1 blank_
  68.  
  69. /* Table of constant values */
  70.  
  71. static doublereal c_b73 = 0.;
  72.  
  73. /*<       subroutine mosfet >*/
  74. /* Subroutine */ int mosfet_()
  75. {
  76.     /* System generated locals */
  77.     integer i_1;
  78.     doublereal d_1, d_2, d_3;
  79.  
  80.     /* Builtin functions */
  81.     double log(), exp();
  82.  
  83.     /* Local variables */
  84.     static doublereal cggb, gcgb, gcgd;
  85. #define cbdo ((doublereal *)&blank_1 + 6)
  86. #define cqbd ((doublereal *)&blank_1 + 25)
  87. #define cgbo ((doublereal *)&blank_1 + 18)
  88. #define gbdo ((doublereal *)&blank_1 + 10)
  89. #define cgdo ((doublereal *)&blank_1 + 19)
  90. #define cqgd ((doublereal *)&blank_1 + 15)
  91. #define cqgb ((doublereal *)&blank_1 + 17)
  92.     static doublereal cgsb;
  93.     static integer ioff;
  94.     static doublereal cbsb;
  95. #define cbso ((doublereal *)&blank_1 + 5)
  96. #define cqbs ((doublereal *)&blank_1 + 27)
  97.     static doublereal gmbs;
  98. #define vbdo ((doublereal *)&blank_1)
  99. #define gdso ((doublereal *)&blank_1 + 8)
  100. #define gbso ((doublereal *)&blank_1 + 11)
  101. #define cgso ((doublereal *)&blank_1 + 20)
  102. #define cqgs ((doublereal *)&blank_1 + 13)
  103. #define vbso ((doublereal *)&blank_1 + 1)
  104. #define vgso ((doublereal *)&blank_1 + 2)
  105. #define vdso ((doublereal *)&blank_1 + 3)
  106. #define vono ((doublereal *)&blank_1 + 21)
  107.     static integer locv, locm;
  108.     static doublereal type;
  109.     static integer loct;
  110.     static doublereal gdpr, gspr, vgdo, evbs, evbd, czbd, czbs, twop, fcpb;
  111.     static integer node1, node2, node3, node4, node5, node6;
  112.     static doublereal fcpb2, czdf2, sarg, gcgs, qdrn, qsrc, xnrm, xrev;
  113.     static integer locy;
  114.     static doublereal czsf2, gcbdb, gcddb, gcbgb, gcgdb, gcdgb;
  115. #define cbdbo ((doublereal *)&blank_1 + 22)
  116.     static doublereal capbd;
  117. #define cbgbo ((doublereal *)&blank_1 + 21)
  118.     static doublereal gcggb;
  119. #define cgdbo ((doublereal *)&blank_1 + 19)
  120.     static doublereal ceqbd, gcbsb;
  121. #define cggbo ((doublereal *)&blank_1 + 18)
  122.     static doublereal cdhat, cbhat;
  123. #define cbsbo ((doublereal *)&blank_1 + 23)
  124. #define cgsbo ((doublereal *)&blank_1 + 20)
  125.     static doublereal cdsat, qgate, qchan, capbs, xfact;
  126. #define gmbso ((doublereal *)&blank_1 + 9)
  127.     static doublereal ceqgs, ceqgd, cssat, qbulk, ceqgb, gcgsb, vinit, vcrit, 
  128.         xmjsw, f1, f2, f3, gcdsb, gcsgb, gcsdb, gcssb, ceqqg, ceqqb, 
  129.         ceqqd, cgate, cqdrn, ceqbs, cdreq, czdwf2, vdsat1, ad, cd;
  130.     extern /* Subroutine */ int moseq1_(), moseq2_(), moseq3_(), intgr8_();
  131.     static doublereal czswf2;
  132. #define qb ((doublereal *)&blank_1 + 12)
  133.     static doublereal as;
  134. #define qd ((doublereal *)&blank_1 + 16)
  135.     static doublereal pd;
  136.     static integer icheck;
  137. #define qg ((doublereal *)&blank_1 + 14)
  138.     static doublereal gm, delvbd;
  139. #define nodplc ((integer *)&blank_1)
  140. #define cvalue ((complex *)&blank_1)
  141. #define vdsato ((doublereal *)&blank_1 + 22)
  142.     static doublereal devmod, ps, covlgs, covlgd, covlgb;
  143.     static integer ibypas;
  144.     static doublereal delvbs, delvgs, delvds, delvgd;
  145. #define cdo ((doublereal *)&blank_1 + 4)
  146. #define cqb ((doublereal *)&blank_1 + 13)
  147. #define cqd ((doublereal *)&blank_1 + 17)
  148. #define cqg ((doublereal *)&blank_1 + 15)
  149. #define qbd ((doublereal *)&blank_1 + 24)
  150. #define qgd ((doublereal *)&blank_1 + 14)
  151. #define qgb ((doublereal *)&blank_1 + 16)
  152.     static integer loc;
  153. #define gmo ((doublereal *)&blank_1 + 7)
  154. #define qbs ((doublereal *)&blank_1 + 26)
  155. #define qgs ((doublereal *)&blank_1 + 12)
  156.     static doublereal vds, vgs, vbs, vbd, vgd, tol, vgb, cbs, cbd, gds, gbd, 
  157.         gbs, cgb, cgd, cgs;
  158.     extern /* Subroutine */ int fetlim_(), limvds_(), pnjlim_();
  159.     static doublereal czbdsw, czbssw, xmj, arg, sargsw, vgb1, geq, vgd1, ceq;
  160.     extern /* Subroutine */ int cmeyer_();
  161.     static doublereal cgs1, cgd1, cgb1;
  162.     extern /* Subroutine */ int moscap_();
  163.     static doublereal cqbulk, vgs1, von1, cbdb, cbgb, cgdb;
  164.  
  165. /*<       implicit double precision (a-h,o-z) >*/
  166.  
  167. /*     this routine processes mosfets for dc and transient analyses. */
  168.  
  169. /* spice version 2g.6  sccsid=tabinf 3/15/83 */
  170. /*<       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem, >*/
  171. /*<      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize, >*/
  172. /*<      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr, >*/
  173. /*<      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1, >*/
  174. /*<      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd, >*/
  175. /*<      5   imynl,imvn,lcvn,nsnod,nsmat,nsval,icnod,icmat,icval, >*/
  176. /*<      6   loutpt,lpol,lzer,irswpf,irswpr,icswpf,icswpr,irpt,jcpt, >*/
  177. /*<      7   irowno,jcolno,nttbr,nttar,lvntmp >*/
  178. /* spice version 2g.6  sccsid=cirdat 3/15/83 */
  179. /*<       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop, >*/
  180. /*<      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs,numalt,numcyc >*/
  181. /* spice version 2g.6  sccsid=mosarg 3/15/83 */
  182. /*<       common /mosarg/ vto,beta,gamma,phi,phib,cox,xnsub,xnfs,xd,xj,xld, >*/
  183. /*<      1   xlamda,uo,uexp,vbp,utra,vmax,xneff,xl,xw,vbi,von,vdsat,qspof, >*/
  184. /*<      2   beta0,beta1,cdrain,xqco,xqc,fnarrw,fshort,lev >*/
  185. /* spice version 2g.6  sccsid=status 3/15/83 */
  186. /*<       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet, >*/
  187. /*<      1   xmu,sfactr,mode,modedc,icalc,initf,method,iord,maxord,noncon, >*/
  188. /*<      2   iterno,itemno,nosolv,modac,ipiv,ivmflg,ipostp,iscrch,iofile >*/
  189. /* spice version 2g.6  sccsid=knstnt 3/15/83 */
  190. /*<       common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok, >*/
  191. /*<      1   gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox, >*/
  192. /*<      2   pivtol,pivrel >*/
  193. /* spice version 2g.6  sccsid=debug 3/15/83 */
  194. /*<       common/debug/ idebug(20) >*/
  195. /* spice version 2g.6  sccsid=blank 3/15/83 */
  196. /*<       common /blank/ value(200000) >*/
  197. /*<       integer nodplc(64) >*/
  198. /*<       complex cvalue(32) >*/
  199. /*<       equivalence (value(1),nodplc(1),cvalue(1)) >*/
  200.  
  201.  
  202. /*<       dimension vbdo(1),vbso(1),vgso(1),vdso(1),cdo(1),cbso(1),cbdo(1), >*/
  203. /*<      1   gmo(1),gdso(1),gmbso(1),gbdo(1),gbso(1), >*/
  204. /*<      2   qb(1),cqb(1),qg(1),cqg(1),qd(1),cqd(1), >*/
  205. /*<      3   cggbo(1),cgdbo(1),cgsbo(1),cbgbo(1),cbdbo(1),cbsbo(1), >*/
  206. /*<      4   cgbo(1),cgdo(1),cgso(1),vono(1),vdsato(1) >*/
  207. /*<       dimension qbd(1),cqbd(1),qbs(1),cqbs(1), >*/
  208. /*<      1          qgs(1),cqgs(1),qgd(1),cqgd(1),qgb(1),cqgb(1) >*/
  209. /*<       equivalence (vbdo (1),value( 1)),(vbso (1),value( 2)), >*/
  210. /*<      1            (vgso (1),value( 3)),(vdso (1),value( 4)), >*/
  211. /*<      2            (cdo  (1),value( 5)),(cbso (1),value( 6)), >*/
  212. /*<      3            (cbdo (1),value( 7)),(gmo  (1),value( 8)), >*/
  213. /*<      4            (gdso (1),value( 9)),(gmbso(1),value(10)), >*/
  214. /*<      5            (gbdo (1),value(11)),(gbso (1),value(12)), >*/
  215. /*<      6            (qb   (1),qgs  ( 1), value(13)), >*/
  216. /*<      7            (cqb  (1),cqgs ( 1), value(14)), >*/
  217. /*<      8            (qg   (1),qgd  ( 1), value(15)), >*/
  218. /*<      9            (cqg  (1),cqgd ( 1), value(16)), >*/
  219. /*<      a            (qd   (1),qgb  ( 1), value(17)), >*/
  220. /*<      b            (cqd  (1),cqgb ( 1), value(18)), >*/
  221. /*<      c            (cggbo(1),cgbo  (1), value(19)), >*/
  222. /*<      d            (cgdbo(1),cgdo  (1), value(20)), >*/
  223. /*<      e            (cgsbo(1),cgso  (1), value(21)), >*/
  224. /*<      f            (cbgbo(1),vono  (1), value(22)), >*/
  225. /*<      g            (cbdbo(1),vdsato(1), value(23)), >*/
  226. /*<      h            (cbsbo(1),           value(24)) >*/
  227. /*<       equivalence (qbd  (1),value(25)),(cqbd (1),value(26)), >*/
  228. /*<      1            (qbs  (1),value(27)),(cqbs (1),value(28)) >*/
  229.  
  230.  
  231. /*<       loc=locate(14) >*/
  232.     loc = cirdat_1.locate[13];
  233. /*<    10 if ((loc.eq.0).or.(nodplc(loc+33).ne.0)) return >*/
  234. L10:
  235.     if (loc == 0 || nodplc[loc + 32] != 0) {
  236.     return 0;
  237.     }
  238. /*<       locv=nodplc(loc+1) >*/
  239.     locv = nodplc[loc];
  240. /*<       node1=nodplc(loc+2) >*/
  241.     node1 = nodplc[loc + 1];
  242. /*<       node2=nodplc(loc+3) >*/
  243.     node2 = nodplc[loc + 2];
  244. /*<       node3=nodplc(loc+4) >*/
  245.     node3 = nodplc[loc + 3];
  246. /*<       node4=nodplc(loc+5) >*/
  247.     node4 = nodplc[loc + 4];
  248. /*<       node5=nodplc(loc+6) >*/
  249.     node5 = nodplc[loc + 5];
  250. /*<       node6=nodplc(loc+7) >*/
  251.     node6 = nodplc[loc + 6];
  252. /*<       locm=nodplc(loc+8) >*/
  253.     locm = nodplc[loc + 7];
  254. /*<       ioff=nodplc(loc+9) >*/
  255.     ioff = nodplc[loc + 8];
  256. /*<       type=nodplc(locm+2) >*/
  257.     type = (doublereal) nodplc[locm + 1];
  258. /*<       locm=nodplc(locm+1) >*/
  259.     locm = nodplc[locm];
  260. /*<       loct=nodplc(loc+26) >*/
  261.     loct = nodplc[loc + 25];
  262.  
  263. /*  dc model parameters */
  264.  
  265. /*<       xj=value(locm+27) >*/
  266.     mosarg_1.xj = blank_1.value[locm + 26];
  267. /*<       xld=value(locm+28) >*/
  268.     mosarg_1.xld = blank_1.value[locm + 27];
  269. /*<       xl=value(locv+1)-2.0d0*xld >*/
  270.     mosarg_1.xl = blank_1.value[locv] - mosarg_1.xld * 2.;
  271. /*<       xw=value(locv+2) >*/
  272.     mosarg_1.xw = blank_1.value[locv + 1];
  273. /*<       devmod=value(locv+8) >*/
  274.     devmod = blank_1.value[locv + 7];
  275. /*<       vto=type*value(locm+2) >*/
  276.     mosarg_1.vto = type * blank_1.value[locm + 1];
  277. /*<       vdsat=type*value(locv+10) >*/
  278.     mosarg_1.vdsat = type * blank_1.value[locv + 9];
  279. /*<       vinit=value(locm+43) >*/
  280.     vinit = blank_1.value[locm + 42];
  281. /*<       ad=value(locv+3) >*/
  282.     ad = blank_1.value[locv + 2];
  283. /*<       as=value(locv+4) >*/
  284.     as = blank_1.value[locv + 3];
  285. /*<       pd=value(locv+11) >*/
  286.     pd = blank_1.value[locv + 10];
  287. /*<       ps=value(locv+12) >*/
  288.     ps = blank_1.value[locv + 11];
  289. /*<       if (value(locm+21).eq.0.0d0. >*/
  290. /*<      1   or.ad.eq.0.0d0.or.as.eq.0.0d0) go to 12 >*/
  291.     if (blank_1.value[locm + 20] == 0. || ad == 0. || as == 0.) {
  292.     goto L12;
  293.     }
  294. /*<       cdsat=value(locm+21)*ad >*/
  295.     cdsat = blank_1.value[locm + 20] * ad;
  296. /*<       cssat=value(locm+21)*as >*/
  297.     cssat = blank_1.value[locm + 20] * as;
  298. /*<       go to 15 >*/
  299.     goto L15;
  300. /*<    12 cdsat=value(locm+11) >*/
  301. L12:
  302.     cdsat = blank_1.value[locm + 10];
  303. /*<       cssat=value(locm+11) >*/
  304.     cssat = blank_1.value[locm + 10];
  305. /*<    15 if ((value(locm+7).le.0.0d0).and. >*/
  306. /*<      1              (value(locm+8).le.0.0d0)) go to 17 >*/
  307. L15:
  308.     if (blank_1.value[locm + 6] <= 0. && blank_1.value[locm + 7] <= 0.) {
  309.     goto L17;
  310.     }
  311. /*<       gdpr=value(locm+7) >*/
  312.     gdpr = blank_1.value[locm + 6];
  313. /*<       gspr=value(locm+8) >*/
  314.     gspr = blank_1.value[locm + 7];
  315. /*<       go to 19 >*/
  316.     goto L19;
  317. /*<    17 gdpr=value(locm+16)/value(locv+13) >*/
  318. L17:
  319.     gdpr = blank_1.value[locm + 15] / blank_1.value[locv + 12];
  320. /*<       gspr=value(locm+16)/value(locv+14) >*/
  321.     gspr = blank_1.value[locm + 15] / blank_1.value[locv + 13];
  322. /*<    19 covlgs=value(locm+13)*xw >*/
  323. L19:
  324.     covlgs = blank_1.value[locm + 12] * mosarg_1.xw;
  325. /*<       covlgd=value(locm+14)*xw >*/
  326.     covlgd = blank_1.value[locm + 13] * mosarg_1.xw;
  327. /*<       covlgb=value(locm+15)*xl >*/
  328.     covlgb = blank_1.value[locm + 14] * mosarg_1.xl;
  329. /*<       lev=value(locm+1) >*/
  330.     mosarg_1.lev = (integer) blank_1.value[locm];
  331.  
  332. /*     mos1, mos2 and mos3 model parameters */
  333.  
  334. /*<       beta=value(locm+3)*xw/xl >*/
  335.     mosarg_1.beta = blank_1.value[locm + 2] * mosarg_1.xw / mosarg_1.xl;
  336. /*<       gamma=value(locm+4) >*/
  337.     mosarg_1.gamma = blank_1.value[locm + 3];
  338. /*<       phi=value(locm+5) >*/
  339.     mosarg_1.phi = blank_1.value[locm + 4];
  340. /*<       xlamda=value(locm+6) >*/
  341.     mosarg_1.xlamda = blank_1.value[locm + 5];
  342. /*<       phib=value(locm+12) >*/
  343.     mosarg_1.phib = blank_1.value[locm + 11];
  344. /*<       cox=value(locm+22)*xw*xl >*/
  345.     mosarg_1.cox = blank_1.value[locm + 21] * mosarg_1.xw * mosarg_1.xl;
  346. /*<       xnsub=value(locm+23) >*/
  347.     mosarg_1.xnsub = blank_1.value[locm + 22];
  348. /*<       xnfs=value(locm+25) >*/
  349.     mosarg_1.xnfs = blank_1.value[locm + 24];
  350. /*<       uo=value(locm+29) >*/
  351.     mosarg_1.uo = blank_1.value[locm + 28];
  352. /*<       vbp=value(locm+30) >*/
  353.     mosarg_1.vbp = blank_1.value[locm + 29];
  354. /*<       uexp=value(locm+31) >*/
  355.     mosarg_1.uexp = blank_1.value[locm + 30];
  356. /*<       utra=value(locm+32) >*/
  357.     mosarg_1.utra = blank_1.value[locm + 31];
  358. /*<       vbi=type*value(locm+44) >*/
  359.     mosarg_1.vbi = type * blank_1.value[locm + 43];
  360. /*<       xd=value(locm+45) >*/
  361.     mosarg_1.xd = blank_1.value[locm + 44];
  362. /*<       vmax=value(locm+33) >*/
  363.     mosarg_1.vmax = blank_1.value[locm + 32];
  364. /*<       xneff=value(locm+34) >*/
  365.     mosarg_1.xneff = blank_1.value[locm + 33];
  366. /*<       xqco=value(locm+35) >*/
  367.     mosarg_1.xqco = blank_1.value[locm + 34];
  368. /*<       fnarrw=value(locm+39) >*/
  369.     mosarg_1.fnarrw = blank_1.value[locm + 38];
  370. /*<       if (lev.eq.3) fnarrw=fnarrw/xw >*/
  371.     if (mosarg_1.lev == 3) {
  372.     mosarg_1.fnarrw /= mosarg_1.xw;
  373.     }
  374.  
  375. /*     initialization */
  376.  
  377. /*<       icheck=1 >*/
  378.     icheck = 1;
  379. /*<       ibypas=0 >*/
  380.     ibypas = 0;
  381. /*<       go to (100,20,30,50,60,70), initf >*/
  382.     switch (status_1.initf) {
  383.     case 1:  goto L100;
  384.     case 2:  goto L20;
  385.     case 3:  goto L30;
  386.     case 4:  goto L50;
  387.     case 5:  goto L60;
  388.     case 6:  goto L70;
  389.     }
  390. /*<    20 if (ioff.ne.0) go to 40 >*/
  391. L20:
  392.     if (ioff != 0) {
  393.     goto L40;
  394.     }
  395. /*<       vds=type*value(locv+5) >*/
  396.     vds = type * blank_1.value[locv + 4];
  397. /*<       vgs=type*value(locv+6) >*/
  398.     vgs = type * blank_1.value[locv + 5];
  399. /*<       vbs=type*value(locv+7) >*/
  400.     vbs = type * blank_1.value[locv + 6];
  401. /*<       if (vds.ne.0.0d0) go to 300 >*/
  402.     if (vds != 0.) {
  403.     goto L300;
  404.     }
  405. /*<       if (vgs.ne.0.0d0) go to 300 >*/
  406.     if (vgs != 0.) {
  407.     goto L300;
  408.     }
  409. /*<       if (vbs.ne.0.0d0) go to 300 >*/
  410.     if (vbs != 0.) {
  411.     goto L300;
  412.     }
  413. /*<       if ((mode.eq.1).and.(modedc.eq.2).and.(nosolv.ne.0)) go to 300 >*/
  414.     if (status_1.mode == 1 && status_1.modedc == 2 && status_1.nosolv != 0) {
  415.     goto L300;
  416.     }
  417. /*<       vbs=vinit >*/
  418.     vbs = vinit;
  419. /*<       vgs=vto >*/
  420.     vgs = mosarg_1.vto;
  421. /*<       vds=0.0d0 >*/
  422.     vds = 0.;
  423. /*<       go to 300 >*/
  424.     goto L300;
  425. /*<    30 if (ioff.eq.0) go to 100 >*/
  426. L30:
  427.     if (ioff == 0) {
  428.     goto L100;
  429.     }
  430. /*<    40 vbs=0.0d0 >*/
  431. L40:
  432.     vbs = 0.;
  433. /*<       vgs=0.0d0 >*/
  434.     vgs = 0.;
  435. /*<       vds=0.0d0 >*/
  436.     vds = 0.;
  437. /*<       go to 300 >*/
  438.     goto L300;
  439. /*<    50 vbs=vbso(lx0+loct) >*/
  440. L50:
  441.     vbs = vbso[tabinf_1.lx0 + loct - 1];
  442. /*<       vgs=vgso(lx0+loct) >*/
  443.     vgs = vgso[tabinf_1.lx0 + loct - 1];
  444. /*<       vds=vdso(lx0+loct) >*/
  445.     vds = vdso[tabinf_1.lx0 + loct - 1];
  446. /*<       go to 300 >*/
  447.     goto L300;
  448. /*<    60 vbs=vbso(lx1+loct) >*/
  449. L60:
  450.     vbs = vbso[tabinf_1.lx1 + loct - 1];
  451. /*<       vgs=vgso(lx1+loct) >*/
  452.     vgs = vgso[tabinf_1.lx1 + loct - 1];
  453. /*<       vds=vdso(lx1+loct) >*/
  454.     vds = vdso[tabinf_1.lx1 + loct - 1];
  455. /*<       go to 300 >*/
  456.     goto L300;
  457. /*<    70 xfact=delta/delold(2) >*/
  458. L70:
  459.     xfact = status_1.delta / status_1.delold[1];
  460. /*<       vbso(lx0+loct)=vbso(lx1+loct) >*/
  461.     vbso[tabinf_1.lx0 + loct - 1] = vbso[tabinf_1.lx1 + loct - 1];
  462. /*<       vbs=(1.0d0+xfact)*vbso(lx1+loct)-xfact*vbso(lx2+loct) >*/
  463.     vbs = (xfact + 1.) * vbso[tabinf_1.lx1 + loct - 1] - xfact * vbso[
  464.         tabinf_1.lx2 + loct - 1];
  465. /*<       vgso(lx0+loct)=vgso(lx1+loct) >*/
  466.     vgso[tabinf_1.lx0 + loct - 1] = vgso[tabinf_1.lx1 + loct - 1];
  467. /*<       vgs=(1.0d0+xfact)*vgso(lx1+loct)-xfact*vgso(lx2+loct) >*/
  468.     vgs = (xfact + 1.) * vgso[tabinf_1.lx1 + loct - 1] - xfact * vgso[
  469.         tabinf_1.lx2 + loct - 1];
  470. /*<       vdso(lx0+loct)=vdso(lx1+loct) >*/
  471.     vdso[tabinf_1.lx0 + loct - 1] = vdso[tabinf_1.lx1 + loct - 1];
  472. /*<       vds=(1.0d0+xfact)*vdso(lx1+loct)-xfact*vdso(lx2+loct) >*/
  473.     vds = (xfact + 1.) * vdso[tabinf_1.lx1 + loct - 1] - xfact * vdso[
  474.         tabinf_1.lx2 + loct - 1];
  475. /*<       vbdo(lx0+loct)=vbso(lx0+loct)-vdso(lx0+loct) >*/
  476.     vbdo[tabinf_1.lx0 + loct - 1] = vbso[tabinf_1.lx0 + loct - 1] - vdso[
  477.         tabinf_1.lx0 + loct - 1];
  478. /*<       cdo(lx0+loct)=cdo(lx1+loct) >*/
  479.     cdo[tabinf_1.lx0 + loct - 1] = cdo[tabinf_1.lx1 + loct - 1];
  480. /*<       cbso(lx0+loct)=cbso(lx1+loct) >*/
  481.     cbso[tabinf_1.lx0 + loct - 1] = cbso[tabinf_1.lx1 + loct - 1];
  482. /*<       cbdo(lx0+loct)=cbdo(lx1+loct) >*/
  483.     cbdo[tabinf_1.lx0 + loct - 1] = cbdo[tabinf_1.lx1 + loct - 1];
  484. /*<       gmo(lx0+loct)=gmo(lx1+loct) >*/
  485.     gmo[tabinf_1.lx0 + loct - 1] = gmo[tabinf_1.lx1 + loct - 1];
  486. /*<       gdso(lx0+loct)=gdso(lx1+loct) >*/
  487.     gdso[tabinf_1.lx0 + loct - 1] = gdso[tabinf_1.lx1 + loct - 1];
  488. /*<       gmbso(lx0+loct)=gmbso(lx1+loct) >*/
  489.     gmbso[tabinf_1.lx0 + loct - 1] = gmbso[tabinf_1.lx1 + loct - 1];
  490. /*<       gbdo(lx0+loct)=gbdo(lx1+loct) >*/
  491.     gbdo[tabinf_1.lx0 + loct - 1] = gbdo[tabinf_1.lx1 + loct - 1];
  492. /*<       gbso(lx0+loct)=gbso(lx1+loct) >*/
  493.     gbso[tabinf_1.lx0 + loct - 1] = gbso[tabinf_1.lx1 + loct - 1];
  494. /*<       cggbo(lx0+loct)=cggbo(lx1+loct) >*/
  495.     cggbo[tabinf_1.lx0 + loct - 1] = cggbo[tabinf_1.lx1 + loct - 1];
  496. /*<       cgdbo(lx0+loct)=cgdbo(lx1+loct) >*/
  497.     cgdbo[tabinf_1.lx0 + loct - 1] = cgdbo[tabinf_1.lx1 + loct - 1];
  498. /*<       cgsbo(lx0+loct)=cgsbo(lx1+loct) >*/
  499.     cgsbo[tabinf_1.lx0 + loct - 1] = cgsbo[tabinf_1.lx1 + loct - 1];
  500. /*<       cbgbo(lx0+loct)=cbgbo(lx1+loct) >*/
  501.     cbgbo[tabinf_1.lx0 + loct - 1] = cbgbo[tabinf_1.lx1 + loct - 1];
  502. /*<       cbdbo(lx0+loct)=cbdbo(lx1+loct) >*/
  503.     cbdbo[tabinf_1.lx0 + loct - 1] = cbdbo[tabinf_1.lx1 + loct - 1];
  504. /*<       cbsbo(lx0+loct)=cbsbo(lx1+loct) >*/
  505.     cbsbo[tabinf_1.lx0 + loct - 1] = cbsbo[tabinf_1.lx1 + loct - 1];
  506. /*<       go to 110 >*/
  507.     goto L110;
  508.  
  509. /*  compute new nonlinear branch voltages */
  510.  
  511. /*<   100 vbs=type*(value(lvnim1+node4)-value(lvnim1+node6)) >*/
  512. L100:
  513.     vbs = type * (blank_1.value[tabinf_1.lvnim1 + node4 - 1] - blank_1.value[
  514.         tabinf_1.lvnim1 + node6 - 1]);
  515. /*<       vgs=type*(value(lvnim1+node2)-value(lvnim1+node6)) >*/
  516.     vgs = type * (blank_1.value[tabinf_1.lvnim1 + node2 - 1] - blank_1.value[
  517.         tabinf_1.lvnim1 + node6 - 1]);
  518. /*<       vds=type*(value(lvnim1+node5)-value(lvnim1+node6)) >*/
  519.     vds = type * (blank_1.value[tabinf_1.lvnim1 + node5 - 1] - blank_1.value[
  520.         tabinf_1.lvnim1 + node6 - 1]);
  521. /*<   110 vbd=vbs-vds >*/
  522. L110:
  523.     vbd = vbs - vds;
  524. /*<       vgd=vgs-vds >*/
  525.     vgd = vgs - vds;
  526. /*<       vgdo=vgso(lx0+loct)-vdso(lx0+loct) >*/
  527.     vgdo = vgso[tabinf_1.lx0 + loct - 1] - vdso[tabinf_1.lx0 + loct - 1];
  528. /*<       delvbs=vbs-vbso(lx0+loct) >*/
  529.     delvbs = vbs - vbso[tabinf_1.lx0 + loct - 1];
  530. /*<       delvbd=vbd-vbdo(lx0+loct) >*/
  531.     delvbd = vbd - vbdo[tabinf_1.lx0 + loct - 1];
  532. /*<       delvgs=vgs-vgso(lx0+loct) >*/
  533.     delvgs = vgs - vgso[tabinf_1.lx0 + loct - 1];
  534. /*<       delvds=vds-vdso(lx0+loct) >*/
  535.     delvds = vds - vdso[tabinf_1.lx0 + loct - 1];
  536. /*<       delvgd=vgd-vgdo >*/
  537.     delvgd = vgd - vgdo;
  538. /*<       if (devmod.lt.0.0d0) go to 120 >*/
  539.     if (devmod < 0.) {
  540.     goto L120;
  541.     }
  542. /*<       cdhat=cdo(lx0+loct)-gbdo(lx0+loct)*delvbd+gmbso(lx0+loct)*delvbs >*/
  543. /*<      1   +gmo(lx0+loct)*delvgs+gdso(lx0+loct)*delvds >*/
  544.     cdhat = cdo[tabinf_1.lx0 + loct - 1] - gbdo[tabinf_1.lx0 + loct - 1] * 
  545.         delvbd + gmbso[tabinf_1.lx0 + loct - 1] * delvbs + gmo[
  546.         tabinf_1.lx0 + loct - 1] * delvgs + gdso[tabinf_1.lx0 + loct - 1] 
  547.         * delvds;
  548. /*<       go to 130 >*/
  549.     goto L130;
  550. /*<   120 cdhat=cdo(lx0+loct)-(gbdo(lx0+loct)-gmbso(lx0+loct))*delvbd >*/
  551. /*<      1   -gmo(lx0+loct)*delvgd+gdso(lx0+loct)*delvds >*/
  552. L120:
  553.     cdhat = cdo[tabinf_1.lx0 + loct - 1] - (gbdo[tabinf_1.lx0 + loct - 1] - 
  554.         gmbso[tabinf_1.lx0 + loct - 1]) * delvbd - gmo[tabinf_1.lx0 + 
  555.         loct - 1] * delvgd + gdso[tabinf_1.lx0 + loct - 1] * delvds;
  556. /*<   130 cbhat=cbso(lx0+loct)+cbdo(lx0+loct)+gbdo(lx0+loct)*delvbd >*/
  557. /*<      1   +gbso(lx0+loct)*delvbs >*/
  558. L130:
  559.     cbhat = cbso[tabinf_1.lx0 + loct - 1] + cbdo[tabinf_1.lx0 + loct - 1] + 
  560.         gbdo[tabinf_1.lx0 + loct - 1] * delvbd + gbso[tabinf_1.lx0 + loct 
  561.         - 1] * delvbs;
  562.  
  563. /*  bypass if solution has not changed */
  564.  
  565. /*<       if (initf.eq.6) go to 200 >*/
  566.     if (status_1.initf == 6) {
  567.     goto L200;
  568.     }
  569. /*<       tol=reltol*dmax1(dabs(vbs),dabs(vbso(lx0+loct)))+vntol >*/
  570. /* Computing MAX */
  571.     d_2 = abs(vbs), d_3 = (d_1 = vbso[tabinf_1.lx0 + loct - 1], abs(d_1));
  572.     tol = knstnt_1.reltol * max(d_3,d_2) + knstnt_1.vntol;
  573. /*<       if (dabs(delvbs).ge.tol) go to 200 >*/
  574.     if (abs(delvbs) >= tol) {
  575.     goto L200;
  576.     }
  577. /*<       tol=reltol*dmax1(dabs(vbd),dabs(vbdo(lx0+loct)))+vntol >*/
  578. /* Computing MAX */
  579.     d_2 = abs(vbd), d_3 = (d_1 = vbdo[tabinf_1.lx0 + loct - 1], abs(d_1));
  580.     tol = knstnt_1.reltol * max(d_3,d_2) + knstnt_1.vntol;
  581. /*<       if (dabs(delvbd).ge.tol) go to 200 >*/
  582.     if (abs(delvbd) >= tol) {
  583.     goto L200;
  584.     }
  585. /*<       tol=reltol*dmax1(dabs(vgs),dabs(vgso(lx0+loct)))+vntol >*/
  586. /* Computing MAX */
  587.     d_2 = abs(vgs), d_3 = (d_1 = vgso[tabinf_1.lx0 + loct - 1], abs(d_1));
  588.     tol = knstnt_1.reltol * max(d_3,d_2) + knstnt_1.vntol;
  589. /*<       if (dabs(delvgs).ge.tol) go to 200 >*/
  590.     if (abs(delvgs) >= tol) {
  591.     goto L200;
  592.     }
  593. /*<       tol=reltol*dmax1(dabs(vds),dabs(vdso(lx0+loct)))+vntol >*/
  594. /* Computing MAX */
  595.     d_2 = abs(vds), d_3 = (d_1 = vdso[tabinf_1.lx0 + loct - 1], abs(d_1));
  596.     tol = knstnt_1.reltol * max(d_3,d_2) + knstnt_1.vntol;
  597. /*<       if (dabs(delvds).ge.tol) go to 200 >*/
  598.     if (abs(delvds) >= tol) {
  599.     goto L200;
  600.     }
  601. /*<       tol=reltol*dmax1(dabs(cdhat),dabs(cdo(lx0+loct)))+abstol >*/
  602. /* Computing MAX */
  603.     d_2 = abs(cdhat), d_3 = (d_1 = cdo[tabinf_1.lx0 + loct - 1], abs(d_1));
  604.     tol = knstnt_1.reltol * max(d_3,d_2) + knstnt_1.abstol;
  605. /*<       if (dabs(cdhat-cdo(lx0+loct)).ge.tol) go to 200 >*/
  606.     if ((d_1 = cdhat - cdo[tabinf_1.lx0 + loct - 1], abs(d_1)) >= tol) {
  607.     goto L200;
  608.     }
  609. /*<       tol=reltol*dmax1(dabs(cbhat),dabs(cbso(lx0+loct)+cbdo(lx0+loct))) >*/
  610. /*<      1   +abstol >*/
  611. /* Computing MAX */
  612.     d_2 = abs(cbhat), d_3 = (d_1 = cbso[tabinf_1.lx0 + loct - 1] + cbdo[
  613.         tabinf_1.lx0 + loct - 1], abs(d_1));
  614.     tol = knstnt_1.reltol * max(d_3,d_2) + knstnt_1.abstol;
  615. /*<       if (dabs(cbhat-(cbso(lx0+loct)+cbdo(lx0+loct))).ge.tol) go to 200 >*/
  616.     if ((d_1 = cbhat - (cbso[tabinf_1.lx0 + loct - 1] + cbdo[tabinf_1.lx0 + 
  617.         loct - 1]), abs(d_1)) >= tol) {
  618.     goto L200;
  619.     }
  620. /*<       vbs=vbso(lx0+loct) >*/
  621.     vbs = vbso[tabinf_1.lx0 + loct - 1];
  622. /*<       vbd=vbdo(lx0+loct) >*/
  623.     vbd = vbdo[tabinf_1.lx0 + loct - 1];
  624. /*<       vgs=vgso(lx0+loct) >*/
  625.     vgs = vgso[tabinf_1.lx0 + loct - 1];
  626. /*<       vds=vdso(lx0+loct) >*/
  627.     vds = vdso[tabinf_1.lx0 + loct - 1];
  628. /*<       vgd=vgs-vds >*/
  629.     vgd = vgs - vds;
  630. /*<       vgb=vgs-vbs >*/
  631.     vgb = vgs - vbs;
  632. /*<       cd=cdo(lx0+loct) >*/
  633.     cd = cdo[tabinf_1.lx0 + loct - 1];
  634. /*<       cbs=cbso(lx0+loct) >*/
  635.     cbs = cbso[tabinf_1.lx0 + loct - 1];
  636. /*<       cbd=cbdo(lx0+loct) >*/
  637.     cbd = cbdo[tabinf_1.lx0 + loct - 1];
  638. /*<       cdrain=devmod*(cd+cbd) >*/
  639.     mosarg_1.cdrain = devmod * (cd + cbd);
  640. /*<       gm=gmo(lx0+loct) >*/
  641.     gm = gmo[tabinf_1.lx0 + loct - 1];
  642. /*<       gds=gdso(lx0+loct) >*/
  643.     gds = gdso[tabinf_1.lx0 + loct - 1];
  644. /*<       gmbs=gmbso(lx0+loct) >*/
  645.     gmbs = gmbso[tabinf_1.lx0 + loct - 1];
  646. /*<       gbd=gbdo(lx0+loct) >*/
  647.     gbd = gbdo[tabinf_1.lx0 + loct - 1];
  648. /*<       gbs=gbso(lx0+loct) >*/
  649.     gbs = gbso[tabinf_1.lx0 + loct - 1];
  650. /*<       devmod=value(locv+8) >*/
  651.     devmod = blank_1.value[locv + 7];
  652. /*<       if (mode.ne.1) go to 135 >*/
  653.     if (status_1.mode != 1) {
  654.     goto L135;
  655.     }
  656. /*<       if ((modedc.eq.2).and.(nosolv.ne.0)) go to 135 >*/
  657.     if (status_1.modedc == 2 && status_1.nosolv != 0) {
  658.     goto L135;
  659.     }
  660. /*<       if (xqco.gt.0.5d0) go to 742 >*/
  661.     if (mosarg_1.xqco > .5) {
  662.     goto L742;
  663.     }
  664. /*<       go to 850 >*/
  665.     goto L850;
  666. /*<   135 if (xqco.le.0.5d0) go to 140 >*/
  667. L135:
  668.     if (mosarg_1.xqco <= .5) {
  669.     goto L140;
  670.     }
  671. /*<       cgb=cgbo(lx0+loct) >*/
  672.     cgb = cgbo[tabinf_1.lx0 + loct - 1];
  673. /*<       cgd=cgdo(lx0+loct) >*/
  674.     cgd = cgdo[tabinf_1.lx0 + loct - 1];
  675. /*<       cgs=cgso(lx0+loct) >*/
  676.     cgs = cgso[tabinf_1.lx0 + loct - 1];
  677. /*<       vgs1=vgso(lx1+loct) >*/
  678.     vgs1 = vgso[tabinf_1.lx1 + loct - 1];
  679. /*<       vgb1=vgs1-vbso(lx1+loct) >*/
  680.     vgb1 = vgs1 - vbso[tabinf_1.lx1 + loct - 1];
  681. /*<       vgd1=vgs1-vdso(lx1+loct) >*/
  682.     vgd1 = vgs1 - vdso[tabinf_1.lx1 + loct - 1];
  683. /*<       go to 735 >*/
  684.     goto L735;
  685. /*<   140 cggb=cggbo(lx0+loct) >*/
  686. L140:
  687.     cggb = cggbo[tabinf_1.lx0 + loct - 1];
  688. /*<       cgdb=cgdbo(lx0+loct) >*/
  689.     cgdb = cgdbo[tabinf_1.lx0 + loct - 1];
  690. /*<       cgsb=cgsbo(lx0+loct) >*/
  691.     cgsb = cgsbo[tabinf_1.lx0 + loct - 1];
  692. /*<       cbgb=cbgbo(lx0+loct) >*/
  693.     cbgb = cbgbo[tabinf_1.lx0 + loct - 1];
  694. /*<       cbdb=cbdbo(lx0+loct) >*/
  695.     cbdb = cbdbo[tabinf_1.lx0 + loct - 1];
  696. /*<       cbsb=cbsbo(lx0+loct) >*/
  697.     cbsb = cbsbo[tabinf_1.lx0 + loct - 1];
  698. /*<       xqc=value(locv+15) >*/
  699.     mosarg_1.xqc = blank_1.value[locv + 14];
  700. /*<       ibypas=1 >*/
  701.     ibypas = 1;
  702. /*<       go to 755 >*/
  703.     goto L755;
  704.  
  705. /*  limit nonlinear branch voltages */
  706.  
  707. /*<   200 von=type*value(locv+9) >*/
  708. L200:
  709.     mosarg_1.von = type * blank_1.value[locv + 8];
  710. /*<       if (vdso(lx0+loct).lt.0.0d0) go to 205 >*/
  711.     if (vdso[tabinf_1.lx0 + loct - 1] < 0.) {
  712.     goto L205;
  713.     }
  714. /*<       call fetlim(vgs,vgso(lx0+loct),von) >*/
  715.     fetlim_(&vgs, &vgso[tabinf_1.lx0 + loct - 1], &mosarg_1.von);
  716. /*<       vds=vgs-vgd >*/
  717.     vds = vgs - vgd;
  718. /*<       call limvds(vds,vdso(lx0+loct)) >*/
  719.     limvds_(&vds, &vdso[tabinf_1.lx0 + loct - 1]);
  720. /*<       vgd=vgs-vds >*/
  721.     vgd = vgs - vds;
  722. /*<       go to 210 >*/
  723.     goto L210;
  724. /*<   205 call fetlim(vgd,vgdo,von) >*/
  725. L205:
  726.     fetlim_(&vgd, &vgdo, &mosarg_1.von);
  727. /*<       vds=vgs-vgd >*/
  728.     vds = vgs - vgd;
  729. /*<       call limvds(-vds,-vdso(lx0+loct)) >*/
  730.     d_1 = -vds;
  731.     d_2 = -vdso[tabinf_1.lx0 + loct - 1];
  732.     limvds_(&d_1, &d_2);
  733. /*<       vgs=vgd+vds >*/
  734.     vgs = vgd + vds;
  735. /*<   210 if (vds.lt.0.0d0) go to 220 >*/
  736. L210:
  737.     if (vds < 0.) {
  738.     goto L220;
  739.     }
  740. /*<       vcrit=vt*dlog(vt/(root2*cssat)) >*/
  741.     vcrit = status_1.vt * log(status_1.vt / (knstnt_1.root2 * cssat));
  742. /*<       call pnjlim(vbs,vbso(lx0+loct),vt,vcrit,icheck) >*/
  743.     pnjlim_(&vbs, &vbso[tabinf_1.lx0 + loct - 1], &status_1.vt, &vcrit, &
  744.         icheck);
  745. /*<       vbd=vbs-vds >*/
  746.     vbd = vbs - vds;
  747. /*<       go to 300 >*/
  748.     goto L300;
  749. /*<   220 vcrit=vt*dlog(vt/(root2*cdsat)) >*/
  750. L220:
  751.     vcrit = status_1.vt * log(status_1.vt / (knstnt_1.root2 * cdsat));
  752. /*<       call pnjlim(vbd,vbdo(lx0+loct),vt,vcrit,icheck) >*/
  753.     pnjlim_(&vbd, &vbdo[tabinf_1.lx0 + loct - 1], &status_1.vt, &vcrit, &
  754.         icheck);
  755. /*<       vbs=vbd+vds >*/
  756.     vbs = vbd + vds;
  757.  
  758. /*  determine dc current and derivatives */
  759.  
  760. /*<   300 vbd=vbs-vds >*/
  761. L300:
  762.     vbd = vbs - vds;
  763. /*<       vgd=vgs-vds >*/
  764.     vgd = vgs - vds;
  765. /*<       vgb=vgs-vbs >*/
  766.     vgb = vgs - vbs;
  767. /*<       if (vbs.gt.0.0d0) go to 310 >*/
  768.     if (vbs > 0.) {
  769.     goto L310;
  770.     }
  771. /*<       gbs=cssat/vt >*/
  772.     gbs = cssat / status_1.vt;
  773. /*<       cbs=gbs*vbs >*/
  774.     cbs = gbs * vbs;
  775. /*<       gbs=gbs+gmin >*/
  776.     gbs += knstnt_1.gmin;
  777. /*<       go to 320 >*/
  778.     goto L320;
  779. /*<   310 evbs=dexp(vbs/vt) >*/
  780. L310:
  781.     evbs = exp(vbs / status_1.vt);
  782. /*<       gbs=cssat*evbs/vt+gmin >*/
  783.     gbs = cssat * evbs / status_1.vt + knstnt_1.gmin;
  784. /*<       cbs=cssat*(evbs-1.0d0) >*/
  785.     cbs = cssat * (evbs - 1.);
  786. /*<   320 if (vbd.gt.0.0d0) go to 330 >*/
  787. L320:
  788.     if (vbd > 0.) {
  789.     goto L330;
  790.     }
  791. /*<       gbd=cdsat/vt >*/
  792.     gbd = cdsat / status_1.vt;
  793. /*<       cbd=gbd*vbd >*/
  794.     cbd = gbd * vbd;
  795. /*<       gbd=gbd+gmin >*/
  796.     gbd += knstnt_1.gmin;
  797. /*<       go to 400 >*/
  798.     goto L400;
  799. /*<   330 evbd=dexp(vbd/vt) >*/
  800. L330:
  801.     evbd = exp(vbd / status_1.vt);
  802. /*<       gbd=cdsat*evbd/vt+gmin >*/
  803.     gbd = cdsat * evbd / status_1.vt + knstnt_1.gmin;
  804. /*<       cbd=cdsat*(evbd-1.0d0) >*/
  805.     cbd = cdsat * (evbd - 1.);
  806.  
  807. /*  compute drain current and derivatives */
  808.  
  809. /*<   400 if (vds.lt.0.0d0) go to 450 >*/
  810. L400:
  811.     if (vds < 0.) {
  812.     goto L450;
  813.     }
  814.  
  815. /*  normal mode */
  816.  
  817. /*<       devmod=1.0d0 >*/
  818.     devmod = 1.;
  819. /*<       value(locv+8)=devmod >*/
  820.     blank_1.value[locv + 7] = devmod;
  821. /*<       go to (405,410,415), lev >*/
  822.     switch (mosarg_1.lev) {
  823.     case 1:  goto L405;
  824.     case 2:  goto L410;
  825.     case 3:  goto L415;
  826.     }
  827. /*<   405 call moseq1(vds,vbs,vgs,gm,gds,gmbs) >*/
  828. L405:
  829.     moseq1_(&vds, &vbs, &vgs, &gm, &gds, &gmbs);
  830. /*<       go to 460 >*/
  831.     goto L460;
  832. /*<   410 call moseq2(vds,vbs,vgs,gm,gds,gmbs, >*/
  833. /*<      1   qgate,qchan,qbulk,cggb,cgdb,cgsb,cbgb,cbdb,cbsb) >*/
  834. L410:
  835.     moseq2_(&vds, &vbs, &vgs, &gm, &gds, &gmbs, &qgate, &qchan, &qbulk, &cggb,
  836.          &cgdb, &cgsb, &cbgb, &cbdb, &cbsb);
  837. /*<       go to 460 >*/
  838.     goto L460;
  839. /*<   415 call moseq3(vds,vbs,vgs,gm,gds,gmbs, >*/
  840. /*<      1   qgate,qchan,qbulk,cggb,cgdb,cgsb,cbgb,cbdb,cbsb) >*/
  841. L415:
  842.     moseq3_(&vds, &vbs, &vgs, &gm, &gds, &gmbs, &qgate, &qchan, &qbulk, &cggb,
  843.          &cgdb, &cgsb, &cbgb, &cbdb, &cbsb);
  844. /*<       go to 460 >*/
  845.     goto L460;
  846.  
  847. /*  inverse mode */
  848.  
  849. /*<   450 devmod=-1.0d0 >*/
  850. L450:
  851.     devmod = -1.;
  852. /*<       value(locv+8)=devmod >*/
  853.     blank_1.value[locv + 7] = devmod;
  854. /*<       go to (452,453,454), lev >*/
  855.     switch (mosarg_1.lev) {
  856.     case 1:  goto L452;
  857.     case 2:  goto L453;
  858.     case 3:  goto L454;
  859.     }
  860. /*<   452 call moseq1(-vds,vbd,vgd,gm,gds,gmbs) >*/
  861. L452:
  862.     d_1 = -vds;
  863.     moseq1_(&d_1, &vbd, &vgd, &gm, &gds, &gmbs);
  864. /*<       go to 460 >*/
  865.     goto L460;
  866. /*<   453 call moseq2(-vds,vbd,vgd,gm,gds,gmbs, >*/
  867. /*<      1   qgate,qchan,qbulk,cggb,cgsb,cgdb,cbgb,cbsb,cbdb) >*/
  868. L453:
  869.     d_1 = -vds;
  870.     moseq2_(&d_1, &vbd, &vgd, &gm, &gds, &gmbs, &qgate, &qchan, &qbulk, &cggb,
  871.          &cgsb, &cgdb, &cbgb, &cbsb, &cbdb);
  872. /*<       go to 460 >*/
  873.     goto L460;
  874. /*<   454 call moseq3(-vds,vbd,vgd,gm,gds,gmbs, >*/
  875. /*<      1   qgate,qchan,qbulk,cggb,cgsb,cgdb,cbgb,cbsb,cbdb) >*/
  876. L454:
  877.     d_1 = -vds;
  878.     moseq3_(&d_1, &vbd, &vgd, &gm, &gds, &gmbs, &qgate, &qchan, &qbulk, &cggb,
  879.          &cgsb, &cgdb, &cbgb, &cbsb, &cbdb);
  880. /*<   460 value(locv+9)=type*von >*/
  881. L460:
  882.     blank_1.value[locv + 8] = type * mosarg_1.von;
  883. /*<       value(locv+10)=type*vdsat >*/
  884.     blank_1.value[locv + 9] = type * mosarg_1.vdsat;
  885. /*<       if (xqco.le.0.5d0) value(locv+15)=xqc >*/
  886.     if (mosarg_1.xqco <= .5) {
  887.     blank_1.value[locv + 14] = mosarg_1.xqc;
  888.     }
  889.  
  890. /*  compute equivalent drain current source */
  891.  
  892. /*<   490 cd=devmod*cdrain-cbd >*/
  893. /* L490: */
  894.     cd = devmod * mosarg_1.cdrain - cbd;
  895. /*<       if (mode.ne.1) go to 500 >*/
  896.     if (status_1.mode != 1) {
  897.     goto L500;
  898.     }
  899. /*<       if ((modedc.eq.2).and.(nosolv.ne.0)) go to 500 >*/
  900.     if (status_1.modedc == 2 && status_1.nosolv != 0) {
  901.     goto L500;
  902.     }
  903. /*<       if (initf.eq.4) go to 500 >*/
  904.     if (status_1.initf == 4) {
  905.     goto L500;
  906.     }
  907. /*<       go to 650 >*/
  908.     goto L650;
  909.  
  910. /*  charge storage elements */
  911.  
  912. /* .. bulk-drain and bulk-source depletion capacitances */
  913.  
  914. /*<   500 czbd=0.0d0 >*/
  915. L500:
  916.     czbd = 0.;
  917. /*<       czbs=0.0d0 >*/
  918.     czbs = 0.;
  919. /*<       czbdsw=0.0d0 >*/
  920.     czbdsw = 0.;
  921. /*<       czbssw=0.0d0 >*/
  922.     czbssw = 0.;
  923. /*<       if ((value(locm+9).eq.0.0d0).or.(value(locm+10).eq.0.0d0)) >*/
  924. /*<      1   go to 505 >*/
  925.     if (blank_1.value[locm + 8] == 0. || blank_1.value[locm + 9] == 0.) {
  926.     goto L505;
  927.     }
  928. /*<       czbd=value(locm+9) >*/
  929.     czbd = blank_1.value[locm + 8];
  930. /*<       czbs=value(locm+10) >*/
  931.     czbs = blank_1.value[locm + 9];
  932. /*<       go to 510 >*/
  933.     goto L510;
  934. /*<   505 if (value(locm+17).eq.0.0d0) go to 510 >*/
  935. L505:
  936.     if (blank_1.value[locm + 16] == 0.) {
  937.     goto L510;
  938.     }
  939. /*<       czbd=value(locm+17)*ad >*/
  940.     czbd = blank_1.value[locm + 16] * ad;
  941. /*<       czbs=value(locm+17)*as >*/
  942.     czbs = blank_1.value[locm + 16] * as;
  943. /*<   510 if (value(locm+19).eq.0.0d0) go to 515 >*/
  944. L510:
  945.     if (blank_1.value[locm + 18] == 0.) {
  946.     goto L515;
  947.     }
  948. /*<       czbdsw=value(locm+19)*pd >*/
  949.     czbdsw = blank_1.value[locm + 18] * pd;
  950. /*<       czbssw=value(locm+19)*ps >*/
  951.     czbssw = blank_1.value[locm + 18] * ps;
  952. /*<   515 phib=value(locm+12) >*/
  953. L515:
  954.     mosarg_1.phib = blank_1.value[locm + 11];
  955. /*<       xmj=value(locm+18) >*/
  956.     xmj = blank_1.value[locm + 17];
  957. /*<       xmjsw=value(locm+20) >*/
  958.     xmjsw = blank_1.value[locm + 19];
  959. /*<       twop=phib+phib >*/
  960.     twop = mosarg_1.phib + mosarg_1.phib;
  961. /*<       fcpb=value(locm+38) >*/
  962.     fcpb = blank_1.value[locm + 37];
  963. /*<       fcpb2=fcpb*fcpb >*/
  964.     fcpb2 = fcpb * fcpb;
  965. /*<       f1=value(locm+40) >*/
  966.     f1 = blank_1.value[locm + 39];
  967. /*<       f2=value(locm+41) >*/
  968.     f2 = blank_1.value[locm + 40];
  969. /*<       f3=value(locm+42) >*/
  970.     f3 = blank_1.value[locm + 41];
  971. /*<       czsf2=czbs/f2 >*/
  972.     czsf2 = czbs / f2;
  973. /*<       czswf2=czbssw/f2 >*/
  974.     czswf2 = czbssw / f2;
  975. /*<       czdf2=czbd/f2 >*/
  976.     czdf2 = czbd / f2;
  977. /*<       czdwf2=czbdsw/f2 >*/
  978.     czdwf2 = czbdsw / f2;
  979. /*<       if (vbs.ge.fcpb) go to 520 >*/
  980.     if (vbs >= fcpb) {
  981.     goto L520;
  982.     }
  983. /*<       arg=1.0d0-vbs/phib >*/
  984.     arg = 1. - vbs / mosarg_1.phib;
  985. /*<       sarg=dexp(-xmj*dlog(arg)) >*/
  986.     sarg = exp(-xmj * log(arg));
  987. /*<       sargsw=dexp(-xmjsw*dlog(arg)) >*/
  988.     sargsw = exp(-xmjsw * log(arg));
  989. /*<       qbs(lx0+loct)=phib*(czbs*(1.0d0-arg*sarg)/(1.0d0-xmj) >*/
  990. /*<      1                +czbssw*(1.0d0-arg*sargsw)/(1.0d0-xmjsw)) >*/
  991.     qbs[tabinf_1.lx0 + loct - 1] = mosarg_1.phib * (czbs * (1. - arg * sarg) /
  992.          (1. - xmj) + czbssw * (1. - arg * sargsw) / (1. - xmjsw));
  993. /*<       capbs=czbs*sarg+czbssw*sargsw >*/
  994.     capbs = czbs * sarg + czbssw * sargsw;
  995. /*<       go to 525 >*/
  996.     goto L525;
  997. /*<   520 qbs(lx0+loct)=f1*(czbs+czbssw)+f3*(vbs-fcpb)*(czsf2+czswf2) >*/
  998. /*<      1    +(vbs*vbs-fcpb*fcpb)*(czsf2*xmj+czswf2*xmjsw) >*/
  999. L520:
  1000.     qbs[tabinf_1.lx0 + loct - 1] = f1 * (czbs + czbssw) + f3 * (vbs - fcpb) * 
  1001.         (czsf2 + czswf2) + (vbs * vbs - fcpb * fcpb) * (czsf2 * xmj + 
  1002.         czswf2 * xmjsw);
  1003. /*<       capbs=f3*(czsf2+czswf2)+vbs/phib*(czsf2*xmj+czswf2*xmjsw) >*/
  1004.     capbs = f3 * (czsf2 + czswf2) + vbs / mosarg_1.phib * (czsf2 * xmj + 
  1005.         czswf2 * xmjsw);
  1006. /*<   525 if (vbd.ge.fcpb) go to 530 >*/
  1007. L525:
  1008.     if (vbd >= fcpb) {
  1009.     goto L530;
  1010.     }
  1011. /*<       arg=1.0d0-vbd/phib >*/
  1012.     arg = 1. - vbd / mosarg_1.phib;
  1013. /*<       sarg=dexp(-xmj*dlog(arg)) >*/
  1014.     sarg = exp(-xmj * log(arg));
  1015. /*<       sargsw=dexp(-xmjsw*dlog(arg)) >*/
  1016.     sargsw = exp(-xmjsw * log(arg));
  1017. /*<       qbd(lx0+loct)=phib*(czbd*(1.0d0-arg*sarg)/(1.0d0-xmj) >*/
  1018. /*<      1              +czbdsw*(1.0d0-arg*sargsw)/(1.0d0-xmjsw)) >*/
  1019.     qbd[tabinf_1.lx0 + loct - 1] = mosarg_1.phib * (czbd * (1. - arg * sarg) /
  1020.          (1. - xmj) + czbdsw * (1. - arg * sargsw) / (1. - xmjsw));
  1021. /*<       capbd=czbd*sarg+czbdsw*sargsw >*/
  1022.     capbd = czbd * sarg + czbdsw * sargsw;
  1023. /*<       go to 560 >*/
  1024.     goto L560;
  1025. /*<   530 qbd(lx0+loct)=f1*(czbd+czbdsw)+f3*(vbd-fcpb)*(czdf2+czdwf2) >*/
  1026. /*<      1    +(vbd*vbd-fcpb*fcpb)*(czdf2*xmj+czdwf2*xmjsw) >*/
  1027. L530:
  1028.     qbd[tabinf_1.lx0 + loct - 1] = f1 * (czbd + czbdsw) + f3 * (vbd - fcpb) * 
  1029.         (czdf2 + czdwf2) + (vbd * vbd - fcpb * fcpb) * (czdf2 * xmj + 
  1030.         czdwf2 * xmjsw);
  1031. /*<       capbd=f3*(czdf2+czdwf2)+vbd/phib*(czdf2*xmj+czdwf2*xmjsw) >*/
  1032.     capbd = f3 * (czdf2 + czdwf2) + vbd / mosarg_1.phib * (czdf2 * xmj + 
  1033.         czdwf2 * xmjsw);
  1034.  
  1035. /*<   560 if (xqco.le.0.5d0) go to 650 >*/
  1036. L560:
  1037.     if (mosarg_1.xqco <= .5) {
  1038.     goto L650;
  1039.     }
  1040. /*<       if ((mode.eq.1).and.(modedc.eq.2).and.(nosolv.ne.0)) go to 650 >*/
  1041.     if (status_1.mode == 1 && status_1.modedc == 2 && status_1.nosolv != 0) {
  1042.     goto L650;
  1043.     }
  1044. /*<       if (initf.ne.4) go to 600 >*/
  1045.     if (status_1.initf != 4) {
  1046.     goto L600;
  1047.     }
  1048. /*<       go to 705 >*/
  1049.     goto L705;
  1050.  
  1051. /* c    calculate equivalent conductances and currents for */
  1052. /* c    depletion capacitors */
  1053.  
  1054. /*<   600 if (initf.ne.5) go to 610 >*/
  1055. L600:
  1056.     if (status_1.initf != 5) {
  1057.     goto L610;
  1058.     }
  1059. /*<       qbd(lx1+loct)=qbd(lx0+loct) >*/
  1060.     qbd[tabinf_1.lx1 + loct - 1] = qbd[tabinf_1.lx0 + loct - 1];
  1061. /*<       qbs(lx1+loct)=qbs(lx0+loct) >*/
  1062.     qbs[tabinf_1.lx1 + loct - 1] = qbs[tabinf_1.lx0 + loct - 1];
  1063. /*<   610 call intgr8(geq,ceq,capbd,loct+24) >*/
  1064. L610:
  1065.     i_1 = loct + 24;
  1066.     intgr8_(&geq, &ceq, &capbd, &i_1);
  1067. /*<       gbd=gbd+geq >*/
  1068.     gbd += geq;
  1069. /*<       cbd=cbd+cqbd(lx0+loct) >*/
  1070.     cbd += cqbd[tabinf_1.lx0 + loct - 1];
  1071. /*<       cd=cd-cqbd(lx0+loct) >*/
  1072.     cd -= cqbd[tabinf_1.lx0 + loct - 1];
  1073. /*<       call intgr8(geq,ceq,capbs,loct+26) >*/
  1074.     i_1 = loct + 26;
  1075.     intgr8_(&geq, &ceq, &capbs, &i_1);
  1076. /*<       gbs=gbs+geq >*/
  1077.     gbs += geq;
  1078. /*<       cbs=cbs+cqbs(lx0+loct) >*/
  1079.     cbs += cqbs[tabinf_1.lx0 + loct - 1];
  1080. /*<       if (initf.ne.5) go to 650 >*/
  1081.     if (status_1.initf != 5) {
  1082.     goto L650;
  1083.     }
  1084. /*<       cqbd(lx1+loct)=cqbd(lx0+loct) >*/
  1085.     cqbd[tabinf_1.lx1 + loct - 1] = cqbd[tabinf_1.lx0 + loct - 1];
  1086. /*<       cqbs(lx1+loct)=cqbs(lx0+loct) >*/
  1087.     cqbs[tabinf_1.lx1 + loct - 1] = cqbs[tabinf_1.lx0 + loct - 1];
  1088.  
  1089. /*  check convergence */
  1090.  
  1091. /*<   650 if (initf.ne.3) go to 660 >*/
  1092. L650:
  1093.     if (status_1.initf != 3) {
  1094.     goto L660;
  1095.     }
  1096. /*<       if (ioff.ne.0) go to 680 >*/
  1097.     if (ioff != 0) {
  1098.     goto L680;
  1099.     }
  1100. /*<   660 if (icheck.eq.1) go to 670 >*/
  1101. L660:
  1102.     if (icheck == 1) {
  1103.     goto L670;
  1104.     }
  1105. /*<       tol=reltol*dmax1(dabs(cdhat),dabs(cd))+abstol >*/
  1106. /* Computing MAX */
  1107.     d_1 = abs(cdhat), d_2 = abs(cd);
  1108.     tol = knstnt_1.reltol * max(d_2,d_1) + knstnt_1.abstol;
  1109. /*<       if (dabs(cdhat-cd).ge.tol) go to 670 >*/
  1110.     if ((d_1 = cdhat - cd, abs(d_1)) >= tol) {
  1111.     goto L670;
  1112.     }
  1113. /*<       tol=reltol*dmax1(dabs(cbhat),dabs(cbs+cbd))+abstol >*/
  1114. /* Computing MAX */
  1115.     d_2 = abs(cbhat), d_3 = (d_1 = cbs + cbd, abs(d_1));
  1116.     tol = knstnt_1.reltol * max(d_3,d_2) + knstnt_1.abstol;
  1117. /*<       if (dabs(cbhat-(cbs+cbd)).le.tol) go to 680 >*/
  1118.     if ((d_1 = cbhat - (cbs + cbd), abs(d_1)) <= tol) {
  1119.     goto L680;
  1120.     }
  1121. /*<   670 noncon=noncon+1 >*/
  1122. L670:
  1123.     ++status_1.noncon;
  1124. /*<   680 vbso(lx0+loct)=vbs >*/
  1125. L680:
  1126.     vbso[tabinf_1.lx0 + loct - 1] = vbs;
  1127. /*<       vbdo(lx0+loct)=vbd >*/
  1128.     vbdo[tabinf_1.lx0 + loct - 1] = vbd;
  1129. /*<       vgso(lx0+loct)=vgs >*/
  1130.     vgso[tabinf_1.lx0 + loct - 1] = vgs;
  1131. /*<       vdso(lx0+loct)=vds >*/
  1132.     vdso[tabinf_1.lx0 + loct - 1] = vds;
  1133. /*<       cdo(lx0+loct)=cd >*/
  1134.     cdo[tabinf_1.lx0 + loct - 1] = cd;
  1135. /*<       cbso(lx0+loct)=cbs >*/
  1136.     cbso[tabinf_1.lx0 + loct - 1] = cbs;
  1137. /*<       cbdo(lx0+loct)=cbd >*/
  1138.     cbdo[tabinf_1.lx0 + loct - 1] = cbd;
  1139. /*<       gmo(lx0+loct)=gm >*/
  1140.     gmo[tabinf_1.lx0 + loct - 1] = gm;
  1141. /*<       gdso(lx0+loct)=gds >*/
  1142.     gdso[tabinf_1.lx0 + loct - 1] = gds;
  1143. /*<       gmbso(lx0+loct)=gmbs >*/
  1144.     gmbso[tabinf_1.lx0 + loct - 1] = gmbs;
  1145. /*<       gbdo(lx0+loct)=gbd >*/
  1146.     gbdo[tabinf_1.lx0 + loct - 1] = gbd;
  1147. /*<       gbso(lx0+loct)=gbs >*/
  1148.     gbso[tabinf_1.lx0 + loct - 1] = gbs;
  1149. /*<       if (xqco.le.0.5d0) go to 690 >*/
  1150.     if (mosarg_1.xqco <= .5) {
  1151.     goto L690;
  1152.     }
  1153. /*<       vono(lx0+loct)=von >*/
  1154.     vono[tabinf_1.lx0 + loct - 1] = mosarg_1.von;
  1155. /*<       vdsato(lx0+loct)=vdsat >*/
  1156.     vdsato[tabinf_1.lx0 + loct - 1] = mosarg_1.vdsat;
  1157. /*<       go to 700 >*/
  1158.     goto L700;
  1159. /*<   690 cggbo(lx0+loct)=cggb >*/
  1160. L690:
  1161.     cggbo[tabinf_1.lx0 + loct - 1] = cggb;
  1162. /*<       cgdbo(lx0+loct)=cgdb >*/
  1163.     cgdbo[tabinf_1.lx0 + loct - 1] = cgdb;
  1164. /*<       cgsbo(lx0+loct)=cgsb >*/
  1165.     cgsbo[tabinf_1.lx0 + loct - 1] = cgsb;
  1166. /*<       cbgbo(lx0+loct)=cbgb >*/
  1167.     cbgbo[tabinf_1.lx0 + loct - 1] = cbgb;
  1168. /*<       cbdbo(lx0+loct)=cbdb >*/
  1169.     cbdbo[tabinf_1.lx0 + loct - 1] = cbdb;
  1170. /*<       cbsbo(lx0+loct)=cbsb >*/
  1171.     cbsbo[tabinf_1.lx0 + loct - 1] = cbsb;
  1172. /*<       go to 750 >*/
  1173.     goto L750;
  1174.  
  1175. /*     xqco > 0.5d0 use meyer"s capacitor model */
  1176.  
  1177. /*<   700 if (mode.ne.1) go to 705 >*/
  1178. L700:
  1179.     if (status_1.mode != 1) {
  1180.     goto L705;
  1181.     }
  1182. /*<       if ((modedc.eq.2).and.(nosolv.ne.0)) go to 705 >*/
  1183.     if (status_1.modedc == 2 && status_1.nosolv != 0) {
  1184.     goto L705;
  1185.     }
  1186. /*<       if (initf.eq.4) go to 705 >*/
  1187.     if (status_1.initf == 4) {
  1188.     goto L705;
  1189.     }
  1190. /*<       go to 742 >*/
  1191.     goto L742;
  1192.  
  1193. /*     calculate meyer's capacitors */
  1194.  
  1195. /*<   705 von1=von >*/
  1196. L705:
  1197.     von1 = mosarg_1.von;
  1198. /*<       vgs1=vgs >*/
  1199.     vgs1 = vgs;
  1200. /*<       vgd1=vgd >*/
  1201.     vgd1 = vgd;
  1202. /*<       vgb1=vgs-vbs >*/
  1203.     vgb1 = vgs - vbs;
  1204. /*<       vdsat1=vdsat >*/
  1205.     vdsat1 = mosarg_1.vdsat;
  1206. /*<       if ((mode.ne.2).or.(initf.eq.5)) go to 710 >*/
  1207.     if (status_1.mode != 2 || status_1.initf == 5) {
  1208.     goto L710;
  1209.     }
  1210. /*<       von1=vono(lx1+loct) >*/
  1211.     von1 = vono[tabinf_1.lx1 + loct - 1];
  1212. /*<       vgs1=vgso(lx1+loct) >*/
  1213.     vgs1 = vgso[tabinf_1.lx1 + loct - 1];
  1214. /*<       vgd1=vgs1-vdso(lx1+loct) >*/
  1215.     vgd1 = vgs1 - vdso[tabinf_1.lx1 + loct - 1];
  1216. /*<       vgb1=vgs1-vbso(lx1+loct) >*/
  1217.     vgb1 = vgs1 - vbso[tabinf_1.lx1 + loct - 1];
  1218. /*<       vdsat1=vdsato(lx1+loct) >*/
  1219.     vdsat1 = vdsato[tabinf_1.lx1 + loct - 1];
  1220. /*<   710 if (devmod.lt.0.0d0) go to 715 >*/
  1221. L710:
  1222.     if (devmod < 0.) {
  1223.     goto L715;
  1224.     }
  1225. /*<       call cmeyer (vgs1,vgd1,vgb1,von1,vdsat1,vgs,vgd,vgb, >*/
  1226. /*<      1   covlgs,covlgd,covlgb,cgs1,cgd1,cgb1,cgs,cgd,cgb) >*/
  1227.     cmeyer_(&vgs1, &vgd1, &vgb1, &von1, &vdsat1, &vgs, &vgd, &vgb, &covlgs, &
  1228.         covlgd, &covlgb, &cgs1, &cgd1, &cgb1, &cgs, &cgd, &cgb);
  1229. /*<       go to 720 >*/
  1230.     goto L720;
  1231. /*<   715 call cmeyer (vgd1,vgs1,vgb1,von1,vdsat1,vgd,vgs,vgb, >*/
  1232. /*<      1   covlgd,covlgs,covlgb,cgd1,cgs1,cgb1,cgd,cgs,cgb) >*/
  1233. L715:
  1234.     cmeyer_(&vgd1, &vgs1, &vgb1, &von1, &vdsat1, &vgd, &vgs, &vgb, &covlgd, &
  1235.         covlgs, &covlgb, &cgd1, &cgs1, &cgb1, &cgd, &cgs, &cgb);
  1236. /*<   720 cgs=0.5d0*(cgs+cgs1) >*/
  1237. L720:
  1238.     cgs = (cgs + cgs1) * .5;
  1239. /*<       cgd=0.5d0*(cgd+cgd1) >*/
  1240.     cgd = (cgd + cgd1) * .5;
  1241. /*<       cgb=0.5d0*(cgb+cgb1) >*/
  1242.     cgb = (cgb + cgb1) * .5;
  1243.  
  1244. /*     store small-signal parameters (for meyer"s model) */
  1245.  
  1246. /*<       if (mode.ne.1) go to 730 >*/
  1247.     if (status_1.mode != 1) {
  1248.     goto L730;
  1249.     }
  1250. /*<       if (initf.ne.4) go to 730 >*/
  1251.     if (status_1.initf != 4) {
  1252.     goto L730;
  1253.     }
  1254. /*<       value(lx0+loct+24)=capbd >*/
  1255.     blank_1.value[tabinf_1.lx0 + loct + 23] = capbd;
  1256. /*<       value(lx0+loct+26)=capbs >*/
  1257.     blank_1.value[tabinf_1.lx0 + loct + 25] = capbs;
  1258. /*<       value(lx0+loct+12)=cgs-covlgs >*/
  1259.     blank_1.value[tabinf_1.lx0 + loct + 11] = cgs - covlgs;
  1260. /*<       value(lx0+loct+14)=cgd-covlgd >*/
  1261.     blank_1.value[tabinf_1.lx0 + loct + 13] = cgd - covlgd;
  1262. /*<       value(lx0+loct+16)=cgb-covlgb >*/
  1263.     blank_1.value[tabinf_1.lx0 + loct + 15] = cgb - covlgb;
  1264. /*<       go to 1000 >*/
  1265.     goto L1000;
  1266. /* c */
  1267. /*<   730 if (initf.ne.6) go to 735 >*/
  1268. L730:
  1269.     if (status_1.initf != 6) {
  1270.     goto L735;
  1271.     }
  1272. /*<       qgs(lx0+loct)=(1.0d0+xfact)*qgs(lx1+loct)-xfact*qgs(lx2+loct) >*/
  1273.     qgs[tabinf_1.lx0 + loct - 1] = (xfact + 1.) * qgs[tabinf_1.lx1 + loct - 1]
  1274.          - xfact * qgs[tabinf_1.lx2 + loct - 1];
  1275. /*<       qgd(lx0+loct)=(1.0d0+xfact)*qgd(lx1+loct)-xfact*qgd(lx2+loct) >*/
  1276.     qgd[tabinf_1.lx0 + loct - 1] = (xfact + 1.) * qgd[tabinf_1.lx1 + loct - 1]
  1277.          - xfact * qgd[tabinf_1.lx2 + loct - 1];
  1278. /*<       qgb(lx0+loct)=(1.0d0+xfact)*qgb(lx1+loct)-xfact*qgb(lx2+loct) >*/
  1279.     qgb[tabinf_1.lx0 + loct - 1] = (xfact + 1.) * qgb[tabinf_1.lx1 + loct - 1]
  1280.          - xfact * qgb[tabinf_1.lx2 + loct - 1];
  1281. /*<       go to 745 >*/
  1282.     goto L745;
  1283. /*<   735 qgs(lx0+loct)=(vgs-vgs1)*cgs >*/
  1284. L735:
  1285.     qgs[tabinf_1.lx0 + loct - 1] = (vgs - vgs1) * cgs;
  1286. /*<       qgd(lx0+loct)=(vgd-vgd1)*cgd >*/
  1287.     qgd[tabinf_1.lx0 + loct - 1] = (vgd - vgd1) * cgd;
  1288. /*<       qgb(lx0+loct)=(vgb-vgb1)*cgb >*/
  1289.     qgb[tabinf_1.lx0 + loct - 1] = (vgb - vgb1) * cgb;
  1290. /*<       if((mode.ne.2).or.(initf.eq.5))go to 740 >*/
  1291.     if (status_1.mode != 2 || status_1.initf == 5) {
  1292.     goto L740;
  1293.     }
  1294. /*<       qgs(lx0+loct)=qgs(lx0+loct)+qgs(lx1+loct) >*/
  1295.     qgs[tabinf_1.lx0 + loct - 1] += qgs[tabinf_1.lx1 + loct - 1];
  1296. /*<       qgd(lx0+loct)=qgd(lx0+loct)+qgd(lx1+loct) >*/
  1297.     qgd[tabinf_1.lx0 + loct - 1] += qgd[tabinf_1.lx1 + loct - 1];
  1298. /*<       qgb(lx0+loct)=qgb(lx0+loct)+qgb(lx1+loct) >*/
  1299.     qgb[tabinf_1.lx0 + loct - 1] += qgb[tabinf_1.lx1 + loct - 1];
  1300. /*<   740 if((mode.eq.1).and.(modedc.eq.2).and.(nosolv.ne.0)) go to 742 >*/
  1301. L740:
  1302.     if (status_1.mode == 1 && status_1.modedc == 2 && status_1.nosolv != 0) {
  1303.     goto L742;
  1304.     }
  1305. /*<       if (initf.ne.5) go to 745 >*/
  1306.     if (status_1.initf != 5) {
  1307.     goto L745;
  1308.     }
  1309. /*<       qgs(lx0+loct)=cgs*vgs >*/
  1310.     qgs[tabinf_1.lx0 + loct - 1] = cgs * vgs;
  1311. /*<       qgd(lx0+loct)=cgd*vgd >*/
  1312.     qgd[tabinf_1.lx0 + loct - 1] = cgd * vgd;
  1313. /*<       qgb(lx0+loct)=cgb*vgb >*/
  1314.     qgb[tabinf_1.lx0 + loct - 1] = cgb * vgb;
  1315. /*<       qgs(lx1+loct)=qgs(lx0+loct) >*/
  1316.     qgs[tabinf_1.lx1 + loct - 1] = qgs[tabinf_1.lx0 + loct - 1];
  1317. /*<       qgd(lx1+loct)=qgd(lx0+loct) >*/
  1318.     qgd[tabinf_1.lx1 + loct - 1] = qgd[tabinf_1.lx0 + loct - 1];
  1319. /*<       qgb(lx1+loct)=qgb(lx0+loct) >*/
  1320.     qgb[tabinf_1.lx1 + loct - 1] = qgb[tabinf_1.lx0 + loct - 1];
  1321.  
  1322. /*     initialize to zero charge conductances and current */
  1323.  
  1324. /*<   742 gcgs=0.0d0 >*/
  1325. L742:
  1326.     gcgs = 0.;
  1327. /*<       ceqgs=0.0d0 >*/
  1328.     ceqgs = 0.;
  1329. /*<       gcgd=0.0d0 >*/
  1330.     gcgd = 0.;
  1331. /*<       ceqgd=0.0d0 >*/
  1332.     ceqgd = 0.;
  1333. /*<       gcgb=0.0d0 >*/
  1334.     gcgb = 0.;
  1335. /*<       ceqgb=0.0d0 >*/
  1336.     ceqgb = 0.;
  1337. /*<       go to  870 >*/
  1338.     goto L870;
  1339. /* c */
  1340. /*<  745  if(cgs.eq.0.0d0) value(lx0+loct+13)=0.0d0 >*/
  1341. L745:
  1342.     if (cgs == 0.) {
  1343.     blank_1.value[tabinf_1.lx0 + loct + 12] = 0.;
  1344.     }
  1345. /*<       if(cgd.eq.0.0d0) value(lx0+loct+15)=0.0d0 >*/
  1346.     if (cgd == 0.) {
  1347.     blank_1.value[tabinf_1.lx0 + loct + 14] = 0.;
  1348.     }
  1349. /*<       if(cgb.eq.0.0d0) value(lx0+loct+17)=0.0d0 >*/
  1350.     if (cgb == 0.) {
  1351.     blank_1.value[tabinf_1.lx0 + loct + 16] = 0.;
  1352.     }
  1353. /* c */
  1354. /* c    calculate equivalent conductances and currents for */
  1355. /* c    meyer"s capacitors */
  1356. /* c */
  1357. /*<       call intgr8(gcgs,ceqgs,cgs,loct+12) >*/
  1358.     i_1 = loct + 12;
  1359.     intgr8_(&gcgs, &ceqgs, &cgs, &i_1);
  1360. /*<       call intgr8(gcgd,ceqgd,cgd,loct+14) >*/
  1361.     i_1 = loct + 14;
  1362.     intgr8_(&gcgd, &ceqgd, &cgd, &i_1);
  1363. /*<       call intgr8(gcgb,ceqgb,cgb,loct+16) >*/
  1364.     i_1 = loct + 16;
  1365.     intgr8_(&gcgb, &ceqgb, &cgb, &i_1);
  1366. /*<       ceqgs=ceqgs-gcgs*vgs+ag(1)*qgs(lx0+loct) >*/
  1367.     ceqgs = ceqgs - gcgs * vgs + status_1.ag[0] * qgs[tabinf_1.lx0 + loct - 1]
  1368.         ;
  1369. /*<       ceqgd=ceqgd-gcgd*vgd+ag(1)*qgd(lx0+loct) >*/
  1370.     ceqgd = ceqgd - gcgd * vgd + status_1.ag[0] * qgd[tabinf_1.lx0 + loct - 1]
  1371.         ;
  1372. /*<       ceqgb=ceqgb-gcgb*vgb+ag(1)*qgb(lx0+loct) >*/
  1373.     ceqgb = ceqgb - gcgb * vgb + status_1.ag[0] * qgb[tabinf_1.lx0 + loct - 1]
  1374.         ;
  1375. /*<       if (initf.ne.5) go to 870 >*/
  1376.     if (status_1.initf != 5) {
  1377.     goto L870;
  1378.     }
  1379. /*<       cqgs(lx1+loct)=cqgs(lx0+loct) >*/
  1380.     cqgs[tabinf_1.lx1 + loct - 1] = cqgs[tabinf_1.lx0 + loct - 1];
  1381. /*<       cqgd(lx1+loct)=cqgd(lx0+loct) >*/
  1382.     cqgd[tabinf_1.lx1 + loct - 1] = cqgd[tabinf_1.lx0 + loct - 1];
  1383. /*<       cqgb(lx1+loct)=cqgb(lx0+loct) >*/
  1384.     cqgb[tabinf_1.lx1 + loct - 1] = cqgb[tabinf_1.lx0 + loct - 1];
  1385. /*<       go to 870 >*/
  1386.     goto L870;
  1387.  
  1388. /* .. bulk and channel charge (plus overlaps) */
  1389.  
  1390. /*<   750 if (mode.ne.1) go to 755 >*/
  1391. L750:
  1392.     if (status_1.mode != 1) {
  1393.     goto L755;
  1394.     }
  1395. /*<       if ((modedc.eq.2).and.(nosolv.ne.0)) go to 755 >*/
  1396.     if (status_1.modedc == 2 && status_1.nosolv != 0) {
  1397.     goto L755;
  1398.     }
  1399. /*<       if (initf.eq.4) go to 755 >*/
  1400.     if (status_1.initf == 4) {
  1401.     goto L755;
  1402.     }
  1403. /*<       go to 850 >*/
  1404.     goto L850;
  1405. /*<   755 if (devmod.eq.-1.0d0) go to 760 >*/
  1406. L755:
  1407.     if (devmod == -1.) {
  1408.     goto L760;
  1409.     }
  1410. /*<       call moscap(vgd,vgs,vgb,covlgd,covlgs,covlgb, >*/
  1411. /*<      1   capbd,capbs,cggb,cgdb,cgsb,cbgb,cbdb,cbsb, >*/
  1412. /*<      2   gcggb,gcgdb,gcgsb,gcbgb,gcbdb,gcbsb, >*/
  1413. /*<      3   gcdgb,gcddb,gcdsb,gcsgb,gcsdb,gcssb, >*/
  1414. /*<      4   qgate,qchan,qbulk,qdrn,qsrc) >*/
  1415.     moscap_(&vgd, &vgs, &vgb, &covlgd, &covlgs, &covlgb, &capbd, &capbs, &
  1416.         cggb, &cgdb, &cgsb, &cbgb, &cbdb, &cbsb, &gcggb, &gcgdb, &gcgsb, &
  1417.         gcbgb, &gcbdb, &gcbsb, &gcdgb, &gcddb, &gcdsb, &gcsgb, &gcsdb, &
  1418.         gcssb, &qgate, &qchan, &qbulk, &qdrn, &qsrc);
  1419. /*<       go to 780 >*/
  1420.     goto L780;
  1421. /*<   760 call moscap(vgs,vgd,vgb,covlgs,covlgd,covlgb, >*/
  1422. /*<      1   capbs,capbd,cggb,cgsb,cgdb,cbgb,cbsb,cbdb, >*/
  1423. /*<      2   gcggb,gcgsb,gcgdb,gcbgb,gcbsb,gcbdb, >*/
  1424. /*<      3   gcsgb,gcssb,gcsdb,gcdgb,gcdsb,gcddb, >*/
  1425. /*<      4   qgate,qchan,qbulk,qsrc,qdrn) >*/
  1426. L760:
  1427.     moscap_(&vgs, &vgd, &vgb, &covlgs, &covlgd, &covlgb, &capbs, &capbd, &
  1428.         cggb, &cgsb, &cgdb, &cbgb, &cbsb, &cbdb, &gcggb, &gcgsb, &gcgdb, &
  1429.         gcbgb, &gcbsb, &gcbdb, &gcsgb, &gcssb, &gcsdb, &gcdgb, &gcdsb, &
  1430.         gcddb, &qgate, &qchan, &qbulk, &qsrc, &qdrn);
  1431. /*<   780 if (ibypas.eq.1) go to 860 >*/
  1432. L780:
  1433.     if (ibypas == 1) {
  1434.     goto L860;
  1435.     }
  1436. /*<       qg(lx0+loct)=qgate >*/
  1437.     qg[tabinf_1.lx0 + loct - 1] = qgate;
  1438. /*<       qd(lx0+loct)=qdrn-qbd(lx0+loct) >*/
  1439.     qd[tabinf_1.lx0 + loct - 1] = qdrn - qbd[tabinf_1.lx0 + loct - 1];
  1440. /*<       qb(lx0+loct)=qbulk+qbd(lx0+loct)+qbs(lx0+loct) >*/
  1441.     qb[tabinf_1.lx0 + loct - 1] = qbulk + qbd[tabinf_1.lx0 + loct - 1] + qbs[
  1442.         tabinf_1.lx0 + loct - 1];
  1443.  
  1444. /*  store small-signal parameters */
  1445.  
  1446. /*<   790 if ((mode.eq.1).and.(modedc.eq.2).and.(nosolv.ne.0)) go to 850 >*/
  1447. /* L790: */
  1448.     if (status_1.mode == 1 && status_1.modedc == 2 && status_1.nosolv != 0) {
  1449.     goto L850;
  1450.     }
  1451. /*<       if (initf.ne.4) go to 800 >*/
  1452.     if (status_1.initf != 4) {
  1453.     goto L800;
  1454.     }
  1455. /*<       value(lx0+loct+18)=cggb >*/
  1456.     blank_1.value[tabinf_1.lx0 + loct + 17] = cggb;
  1457. /*<       value(lx0+loct+19)=cgdb >*/
  1458.     blank_1.value[tabinf_1.lx0 + loct + 18] = cgdb;
  1459. /*<       value(lx0+loct+20)=cgsb >*/
  1460.     blank_1.value[tabinf_1.lx0 + loct + 19] = cgsb;
  1461. /*<       value(lx0+loct+21)=cbgb >*/
  1462.     blank_1.value[tabinf_1.lx0 + loct + 20] = cbgb;
  1463. /*<       value(lx0+loct+22)=cbdb >*/
  1464.     blank_1.value[tabinf_1.lx0 + loct + 21] = cbdb;
  1465. /*<       value(lx0+loct+23)=cbsb >*/
  1466.     blank_1.value[tabinf_1.lx0 + loct + 22] = cbsb;
  1467. /*<       value(lx0+loct+24)=capbd >*/
  1468.     blank_1.value[tabinf_1.lx0 + loct + 23] = capbd;
  1469. /*<       value(lx0+loct+26)=capbs >*/
  1470.     blank_1.value[tabinf_1.lx0 + loct + 25] = capbs;
  1471. /*<       go to 1000 >*/
  1472.     goto L1000;
  1473.  
  1474. /*  transient analysis */
  1475.  
  1476. /*<   800 if (initf.ne.5) go to 810 >*/
  1477. L800:
  1478.     if (status_1.initf != 5) {
  1479.     goto L810;
  1480.     }
  1481. /*<       qb(lx1+loct)=qb(lx0+loct) >*/
  1482.     qb[tabinf_1.lx1 + loct - 1] = qb[tabinf_1.lx0 + loct - 1];
  1483. /*<       qg(lx1+loct)=qg(lx0+loct) >*/
  1484.     qg[tabinf_1.lx1 + loct - 1] = qg[tabinf_1.lx0 + loct - 1];
  1485. /*<       qd(lx1+loct)=qd(lx0+loct) >*/
  1486.     qd[tabinf_1.lx1 + loct - 1] = qd[tabinf_1.lx0 + loct - 1];
  1487. /* .. integrate qb */
  1488. /*<   810 call intgr8(geq,ceq,0.0d0,loct+12) >*/
  1489. L810:
  1490.     i_1 = loct + 12;
  1491.     intgr8_(&geq, &ceq, &c_b73, &i_1);
  1492. /* .. integrate qg */
  1493. /*<       call intgr8(geq,ceq,0.0d0,loct+14) >*/
  1494.     i_1 = loct + 14;
  1495.     intgr8_(&geq, &ceq, &c_b73, &i_1);
  1496. /* .. integrate qd */
  1497. /*<       call intgr8(geq,ceq,0.0d0,loct+16) >*/
  1498.     i_1 = loct + 16;
  1499.     intgr8_(&geq, &ceq, &c_b73, &i_1);
  1500. /*<       go to 860 >*/
  1501.     goto L860;
  1502.  
  1503. /*     initialize to zero charge conductances and current */
  1504.  
  1505. /*<   850 ceqqg=0.0d0 >*/
  1506. L850:
  1507.     ceqqg = 0.;
  1508. /*<       ceqqb=0.0d0 >*/
  1509.     ceqqb = 0.;
  1510. /*<       ceqqd=0.0d0 >*/
  1511.     ceqqd = 0.;
  1512. /*<       gcdgb=0.0d0 >*/
  1513.     gcdgb = 0.;
  1514. /*<       gcddb=0.0d0 >*/
  1515.     gcddb = 0.;
  1516. /*<       gcdsb=0.0d0 >*/
  1517.     gcdsb = 0.;
  1518. /*<       gcsgb=0.0d0 >*/
  1519.     gcsgb = 0.;
  1520. /*<       gcsdb=0.0d0 >*/
  1521.     gcsdb = 0.;
  1522. /*<       gcssb=0.0d0 >*/
  1523.     gcssb = 0.;
  1524. /*<       gcggb=0.0d0 >*/
  1525.     gcggb = 0.;
  1526. /*<       gcgdb=0.0d0 >*/
  1527.     gcgdb = 0.;
  1528. /*<       gcgsb=0.0d0 >*/
  1529.     gcgsb = 0.;
  1530. /*<       gcbgb=0.0d0 >*/
  1531.     gcbgb = 0.;
  1532. /*<       gcbdb=0.0d0 >*/
  1533.     gcbdb = 0.;
  1534. /*<       gcbsb=0.0d0 >*/
  1535.     gcbsb = 0.;
  1536. /*<       go to 900 >*/
  1537.     goto L900;
  1538.  
  1539. /*     evaluate equivalent charge currents */
  1540.  
  1541. /*<   860 cgate=cqg(lx0+loct) >*/
  1542. L860:
  1543.     cgate = cqg[tabinf_1.lx0 + loct - 1];
  1544. /*<       cqbulk=cqb(lx0+loct) >*/
  1545.     cqbulk = cqb[tabinf_1.lx0 + loct - 1];
  1546. /*<       cqdrn=cqd(lx0+loct) >*/
  1547.     cqdrn = cqd[tabinf_1.lx0 + loct - 1];
  1548. /*<       ceqqg=cgate-gcggb*vgb+gcgdb*vbd+gcgsb*vbs >*/
  1549.     ceqqg = cgate - gcggb * vgb + gcgdb * vbd + gcgsb * vbs;
  1550. /*<       ceqqb=cqbulk-gcbgb*vgb+gcbdb*vbd+gcbsb*vbs >*/
  1551.     ceqqb = cqbulk - gcbgb * vgb + gcbdb * vbd + gcbsb * vbs;
  1552. /*<       ceqqd=cqdrn-gcdgb*vgb+gcddb*vbd+gcdsb*vbs >*/
  1553.     ceqqd = cqdrn - gcdgb * vgb + gcddb * vbd + gcdsb * vbs;
  1554. /*<       if (initf.ne.5) go to 900 >*/
  1555.     if (status_1.initf != 5) {
  1556.     goto L900;
  1557.     }
  1558. /*<       cqb(lx1+loct)=cqb(lx0+loct) >*/
  1559.     cqb[tabinf_1.lx1 + loct - 1] = cqb[tabinf_1.lx0 + loct - 1];
  1560. /*<       cqg(lx1+loct)=cqg(lx0+loct) >*/
  1561.     cqg[tabinf_1.lx1 + loct - 1] = cqg[tabinf_1.lx0 + loct - 1];
  1562. /*<       cqd(lx1+loct)=cqd(lx0+loct) >*/
  1563.     cqd[tabinf_1.lx1 + loct - 1] = cqd[tabinf_1.lx0 + loct - 1];
  1564. /*<       go to 900 >*/
  1565.     goto L900;
  1566.  
  1567. /* c   do the mapping from meyer"s capacitor model into the charge */
  1568. /* c   oriented model */
  1569. /* c */
  1570. /*<   870 ceqqg=ceqgs+ceqgb+ceqgd >*/
  1571. L870:
  1572.     ceqqg = ceqgs + ceqgb + ceqgd;
  1573. /*<       ceqqb=-ceqgb >*/
  1574.     ceqqb = -ceqgb;
  1575. /*<       ceqqd=-ceqgd >*/
  1576.     ceqqd = -ceqgd;
  1577. /*<       gcbdb=0.0d0 >*/
  1578.     gcbdb = 0.;
  1579. /*<       gcbsb=0.0d0 >*/
  1580.     gcbsb = 0.;
  1581. /*<       gcdsb=0.0d0 >*/
  1582.     gcdsb = 0.;
  1583. /*<       gcsdb=0.0d0 >*/
  1584.     gcsdb = 0.;
  1585. /*<       gcgdb=-gcgd >*/
  1586.     gcgdb = -gcgd;
  1587. /*<       gcgsb=-gcgs >*/
  1588.     gcgsb = -gcgs;
  1589. /*<       gcbgb=-gcgb >*/
  1590.     gcbgb = -gcgb;
  1591. /*<       gcdgb=-gcgd >*/
  1592.     gcdgb = -gcgd;
  1593. /*<       gcsgb=-gcgs >*/
  1594.     gcsgb = -gcgs;
  1595. /*<       gcssb=gcgs >*/
  1596.     gcssb = gcgs;
  1597. /*<       gcddb=gcgd >*/
  1598.     gcddb = gcgd;
  1599. /*<       gcggb=gcgd+gcgs+gcgb >*/
  1600.     gcggb = gcgd + gcgs + gcgb;
  1601.  
  1602. /*     store charge storage info for meyer's cap in lx table */
  1603.  
  1604. /*<       cgbo(lx0+loct)=cgb >*/
  1605.     cgbo[tabinf_1.lx0 + loct - 1] = cgb;
  1606. /*<       cgso(lx0+loct)=cgs >*/
  1607.     cgso[tabinf_1.lx0 + loct - 1] = cgs;
  1608. /*<       cgdo(lx0+loct)=cgd >*/
  1609.     cgdo[tabinf_1.lx0 + loct - 1] = cgd;
  1610.  
  1611. /*  load current vector */
  1612.  
  1613. /*<   900 ceqbs=type*(cbs-(gbs-gmin)*vbs) >*/
  1614. L900:
  1615.     ceqbs = type * (cbs - (gbs - knstnt_1.gmin) * vbs);
  1616. /*<       ceqbd=type*(cbd-(gbd-gmin)*vbd) >*/
  1617.     ceqbd = type * (cbd - (gbd - knstnt_1.gmin) * vbd);
  1618. /*<       ceqqg=type*ceqqg >*/
  1619.     ceqqg = type * ceqqg;
  1620. /*<       ceqqb=type*ceqqb >*/
  1621.     ceqqb = type * ceqqb;
  1622. /*<       ceqqd=type*ceqqd >*/
  1623.     ceqqd = type * ceqqd;
  1624. /*<       xnrm=1.0d0 >*/
  1625.     xnrm = 1.;
  1626. /*<       xrev=0.0d0 >*/
  1627.     xrev = 0.;
  1628. /*<       if (devmod.lt.0.0d0) go to 910 >*/
  1629.     if (devmod < 0.) {
  1630.     goto L910;
  1631.     }
  1632. /*<       cdreq=type*(cdrain-gds*vds-gm*vgs-gmbs*vbs) >*/
  1633.     cdreq = type * (mosarg_1.cdrain - gds * vds - gm * vgs - gmbs * vbs);
  1634. /*<       go to 920 >*/
  1635.     goto L920;
  1636. /*<   910 xnrm=0.0d0 >*/
  1637. L910:
  1638.     xnrm = 0.;
  1639. /*<       xrev=1.0d0 >*/
  1640.     xrev = 1.;
  1641. /*<       cdreq=-type*(cdrain-gds*(-vds)-gm*vgd-gmbs*vbd) >*/
  1642.     cdreq = -type * (mosarg_1.cdrain - gds * (-vds) - gm * vgd - gmbs * vbd);
  1643. /*<   920 value(lvn+node2)=value(lvn+node2)-ceqqg >*/
  1644. L920:
  1645.     blank_1.value[tabinf_1.lvn + node2 - 1] -= ceqqg;
  1646. /*<       value(lvn+node4)=value(lvn+node4)-ceqbs-ceqbd-ceqqb >*/
  1647.     blank_1.value[tabinf_1.lvn + node4 - 1] = blank_1.value[tabinf_1.lvn + 
  1648.         node4 - 1] - ceqbs - ceqbd - ceqqb;
  1649. /*<       value(lvn+node5)=value(lvn+node5)-cdreq+ceqbd-ceqqd >*/
  1650.     blank_1.value[tabinf_1.lvn + node5 - 1] = blank_1.value[tabinf_1.lvn + 
  1651.         node5 - 1] - cdreq + ceqbd - ceqqd;
  1652. /*<       value(lvn+node6)=value(lvn+node6)+cdreq+ceqbs >*/
  1653. /*<      1   +ceqqg+ceqqb+ceqqd >*/
  1654.     blank_1.value[tabinf_1.lvn + node6 - 1] = blank_1.value[tabinf_1.lvn + 
  1655.         node6 - 1] + cdreq + ceqbs + ceqqg + ceqqb + ceqqd;
  1656.  
  1657. /*  load y matrix */
  1658.  
  1659. /*<       locy=lvn+nodplc(loc+27) >*/
  1660.     locy = tabinf_1.lvn + nodplc[loc + 26];
  1661. /*<       value(locy)=value(locy)+gdpr >*/
  1662.     blank_1.value[locy - 1] += gdpr;
  1663. /*<       locy=lvn+nodplc(loc+28) >*/
  1664.     locy = tabinf_1.lvn + nodplc[loc + 27];
  1665. /*<       value(locy)=value(locy)+gcggb >*/
  1666.     blank_1.value[locy - 1] += gcggb;
  1667. /*<       locy=lvn+nodplc(loc+29) >*/
  1668.     locy = tabinf_1.lvn + nodplc[loc + 28];
  1669. /*<       value(locy)=value(locy)+gspr >*/
  1670.     blank_1.value[locy - 1] += gspr;
  1671. /*<       locy=lvn+nodplc(loc+30) >*/
  1672.     locy = tabinf_1.lvn + nodplc[loc + 29];
  1673. /*<       value(locy)=value(locy)+gbd+gbs-gcbgb-gcbdb-gcbsb >*/
  1674.     blank_1.value[locy - 1] = blank_1.value[locy - 1] + gbd + gbs - gcbgb - 
  1675.         gcbdb - gcbsb;
  1676. /*<       locy=lvn+nodplc(loc+31) >*/
  1677.     locy = tabinf_1.lvn + nodplc[loc + 30];
  1678. /*<       value(locy)=value(locy)+gdpr+gds+gbd+xrev*(gm+gmbs)+gcddb >*/
  1679.     blank_1.value[locy - 1] = blank_1.value[locy - 1] + gdpr + gds + gbd + 
  1680.         xrev * (gm + gmbs) + gcddb;
  1681. /*<       locy=lvn+nodplc(loc+32) >*/
  1682.     locy = tabinf_1.lvn + nodplc[loc + 31];
  1683. /*<       value(locy)=value(locy)+gspr+gds+gbs+xnrm*(gm+gmbs)+gcssb >*/
  1684.     blank_1.value[locy - 1] = blank_1.value[locy - 1] + gspr + gds + gbs + 
  1685.         xnrm * (gm + gmbs) + gcssb;
  1686. /*<       locy=lvn+nodplc(loc+10) >*/
  1687.     locy = tabinf_1.lvn + nodplc[loc + 9];
  1688. /*<       value(locy)=value(locy)-gdpr >*/
  1689.     blank_1.value[locy - 1] -= gdpr;
  1690. /*<       locy=lvn+nodplc(loc+11) >*/
  1691.     locy = tabinf_1.lvn + nodplc[loc + 10];
  1692. /*<       value(locy)=value(locy)-gcggb-gcgdb-gcgsb >*/
  1693.     blank_1.value[locy - 1] = blank_1.value[locy - 1] - gcggb - gcgdb - gcgsb;
  1694.  
  1695. /*<       locy=lvn+nodplc(loc+12) >*/
  1696.     locy = tabinf_1.lvn + nodplc[loc + 11];
  1697. /*<       value(locy)=value(locy)+gcgdb >*/
  1698.     blank_1.value[locy - 1] += gcgdb;
  1699. /*<       locy=lvn+nodplc(loc+13) >*/
  1700.     locy = tabinf_1.lvn + nodplc[loc + 12];
  1701. /*<       value(locy)=value(locy)+gcgsb >*/
  1702.     blank_1.value[locy - 1] += gcgsb;
  1703. /*<       locy=lvn+nodplc(loc+14) >*/
  1704.     locy = tabinf_1.lvn + nodplc[loc + 13];
  1705. /*<       value(locy)=value(locy)-gspr >*/
  1706.     blank_1.value[locy - 1] -= gspr;
  1707. /*<       locy=lvn+nodplc(loc+15) >*/
  1708.     locy = tabinf_1.lvn + nodplc[loc + 14];
  1709. /*<       value(locy)=value(locy)+gcbgb >*/
  1710.     blank_1.value[locy - 1] += gcbgb;
  1711. /*<       locy=lvn+nodplc(loc+16) >*/
  1712.     locy = tabinf_1.lvn + nodplc[loc + 15];
  1713. /*<       value(locy)=value(locy)-gbd+gcbdb >*/
  1714.     blank_1.value[locy - 1] = blank_1.value[locy - 1] - gbd + gcbdb;
  1715. /*<       locy=lvn+nodplc(loc+17) >*/
  1716.     locy = tabinf_1.lvn + nodplc[loc + 16];
  1717. /*<       value(locy)=value(locy)-gbs+gcbsb >*/
  1718.     blank_1.value[locy - 1] = blank_1.value[locy - 1] - gbs + gcbsb;
  1719. /*<       locy=lvn+nodplc(loc+18) >*/
  1720.     locy = tabinf_1.lvn + nodplc[loc + 17];
  1721. /*<       value(locy)=value(locy)-gdpr >*/
  1722.     blank_1.value[locy - 1] -= gdpr;
  1723. /*<       locy=lvn+nodplc(loc+19) >*/
  1724.     locy = tabinf_1.lvn + nodplc[loc + 18];
  1725. /*<       value(locy)=value(locy)+(xnrm-xrev)*gm+gcdgb >*/
  1726.     blank_1.value[locy - 1] = blank_1.value[locy - 1] + (xnrm - xrev) * gm + 
  1727.         gcdgb;
  1728. /*<       locy=lvn+nodplc(loc+20) >*/
  1729.     locy = tabinf_1.lvn + nodplc[loc + 19];
  1730. /*<       value(locy)=value(locy)-gbd+(xnrm-xrev)*gmbs- >*/
  1731. /*<      1   gcdgb-gcddb-gcdsb >*/
  1732.     blank_1.value[locy - 1] = blank_1.value[locy - 1] - gbd + (xnrm - xrev) * 
  1733.         gmbs - gcdgb - gcddb - gcdsb;
  1734. /*<       locy=lvn+nodplc(loc+21) >*/
  1735.     locy = tabinf_1.lvn + nodplc[loc + 20];
  1736. /*<       value(locy)=value(locy)-gds-xnrm*(gm+gmbs)+gcdsb >*/
  1737.     blank_1.value[locy - 1] = blank_1.value[locy - 1] - gds - xnrm * (gm + 
  1738.         gmbs) + gcdsb;
  1739. /*<       locy=lvn+nodplc(loc+22) >*/
  1740.     locy = tabinf_1.lvn + nodplc[loc + 21];
  1741. /*<       value(locy)=value(locy)-(xnrm-xrev)*gm+gcsgb >*/
  1742.     blank_1.value[locy - 1] = blank_1.value[locy - 1] - (xnrm - xrev) * gm + 
  1743.         gcsgb;
  1744. /*<       locy=lvn+nodplc(loc+23) >*/
  1745.     locy = tabinf_1.lvn + nodplc[loc + 22];
  1746. /*<       value(locy)=value(locy)-gspr >*/
  1747.     blank_1.value[locy - 1] -= gspr;
  1748. /*<       locy=lvn+nodplc(loc+24) >*/
  1749.     locy = tabinf_1.lvn + nodplc[loc + 23];
  1750. /*<       value(locy)=value(locy)-gbs-(xnrm-xrev)*gmbs- >*/
  1751. /*<      1   gcsgb-gcsdb-gcssb >*/
  1752.     blank_1.value[locy - 1] = blank_1.value[locy - 1] - gbs - (xnrm - xrev) * 
  1753.         gmbs - gcsgb - gcsdb - gcssb;
  1754. /*<       locy=lvn+nodplc(loc+25) >*/
  1755.     locy = tabinf_1.lvn + nodplc[loc + 24];
  1756. /*<       value(locy)=value(locy)-gds-xrev*(gm+gmbs)+gcsdb >*/
  1757.     blank_1.value[locy - 1] = blank_1.value[locy - 1] - gds - xrev * (gm + 
  1758.         gmbs) + gcsdb;
  1759. /*<  1000 loc=nodplc(loc) >*/
  1760. L1000:
  1761.     loc = nodplc[loc - 1];
  1762. /*<       go to 10 >*/
  1763.     goto L10;
  1764. /*<       end >*/
  1765. } /* mosfet_ */
  1766.  
  1767. #undef qgs
  1768. #undef qbs
  1769. #undef gmo
  1770. #undef qgb
  1771. #undef qgd
  1772. #undef qbd
  1773. #undef cqg
  1774. #undef cqd
  1775. #undef cqb
  1776. #undef cdo
  1777. #undef vdsato
  1778. #undef cvalue
  1779. #undef nodplc
  1780. #undef qg
  1781. #undef qd
  1782. #undef qb
  1783. #undef gmbso
  1784. #undef cgsbo
  1785. #undef cbsbo
  1786. #undef cggbo
  1787. #undef cgdbo
  1788. #undef cbgbo
  1789. #undef cbdbo
  1790. #undef vono
  1791. #undef vdso
  1792. #undef vgso
  1793. #undef vbso
  1794. #undef cqgs
  1795. #undef cgso
  1796. #undef gbso
  1797. #undef gdso
  1798. #undef vbdo
  1799. #undef cqbs
  1800. #undef cbso
  1801. #undef cqgb
  1802. #undef cqgd
  1803. #undef cgdo
  1804. #undef gbdo
  1805. #undef cgbo
  1806. #undef cqbd
  1807. #undef cbdo
  1808.  
  1809.  
  1810.